🦜 Swift 17

[Swift] 클로저

클로저 클로저 == 함수. 다만, 함수는 이름이 있는 클로저이다. { (매개변수 목록) -> 반환타입 in 실행코드 } Parameter 와 ReturnType 이 있는 클로저 let closure = { (name: String) -> String in return "Hello, \(name)" } name은 Argument Label이 아니고, 오직 Parameter Name. 클로저를 호출할 때는 함수와 다르게 Argument Label 을 사용하지 않는다. closure("jihyun") closure(name: "jihyun") //error! 또 다른 예시를 살펴보면 다음과 같다. // 클로저의 사용 var sum: (Int, Int) -> Int = { (a: Int, b: Int) -> I..

🦜 Swift 2022.11.20

[Swift] 열거형

enum Weekday { case mon case tue case wed case thu, fri, sat, sun } var day: Weekday = Weekday.mon day = .tue // day 가 Weekday 타입이므로 .tue 이런 식으로 축약해서 써줄 수도 있다. 다만 Weekday 타입이라고 명시해줬어야 함 switch 문을 이런 식으로 많이 쓴다. 그리고 Swift 의 enum 은 C 언어의 enum 처럼 정수값을 가질 수 있다. enum Fruit: Int { case apple = 0 case grape = 1 case peach } 자동으로 1씩 증가한다. 따라서 peach 는 2 단, case 별로 다른 정수 값을 가져야 한다. 이렇게 rawValue 로 값을 확인할 수 ..

🦜 Swift 2022.11.19

[Swift] 클래스

클래스와 구조체는 매우 유사하지만 차이점은 구조체는 값 타입인 반면 클래스는 참조 타입이다. 값 타입과 참조 타입 값 타입은 상수나 변수에 할당하거나 함수에 넘겨질 때 복사가 됩니다. 값 타입과는 다르게 참조 타입은 변수나 상수에 할당하거나 함수에 넘길 때 복사하지 않습니다. 복사 대신에 기존에 같은 인스턴스에 참조가 사용됩니다. 즉 값이 복사되는 것이 아니라 메모리를 참조하는 것입니다! 그래서 클래스는 객체를 만들고 프로퍼티 접근해서 값을 변경하면 그 프로퍼티 값이 다 변경된다. 다시 말해 메모리를 참조하기 때문 그리고 Swift 의 클래스는 다중 상속이 안된다는 점을 기억하자. 클래스 예제를 보자 class Sample { var mutableProperty: Int = 300 // 가변 프로퍼티 l..

🦜 Swift 2022.11.19

[Swift] 구조체

위의 구조체를 예시로 들어보겠다. var mutable: Sample = Sample() mutable.mutableProperty = 200 // ok! mutable.immutableProperty = 200 // error //////////////////////////////////////////////////////// let immutable: Sample = Sample() // 불변 인스턴스 immutable.mutableProperty = 200 // error immutable.immutableProperty = 200 // error 타입 프로퍼티 및 타입 메서드라는 것은 각각 타입 자체가 사용할 수 있는 프로퍼티, 메서드를 의미한다. Sample.typeProperty = 300 S..

🦜 Swift 2022.11.19

[Swift] if let vs guard let

if let xx = x { //xx는 여기서만 사용가능 } else { print("x is Optional") } print(xx) //error! if let의 경우에는 옵셔널 추출을 실패하여 false가 된 else문 뿐만 아니라 성공한 경우에도 제어를 할 수 있습니다. 하지만 할당 상수를 if문 안에서만 사용할 수 있습니다. 위의 코드처럼 실행을 해본다면 xx는 지역변수이기 때문에 오류가 발생하게 됩니다. 위의 코드를 보면 xx 는 전역변수로 쓸 수 없고 else 문은 통과하지 않는다. 반면 위의 코드는 else 문을 통과한다. (nil 일때) https://velog.io/@wook4506/iOS-Swift-%EC%98%B5%EC%85%94%EB%84%90-%EB%B0%94%EC%9D%B8%E..

🦜 Swift 2022.11.19

[Swift] guard let

옵셔널 바인딩을 할 때 if let 뿐만 아니라 guard let이라는 것도 많이 쓰입니다. 둘은 거의 비슷하지만 약간의 차이가 있습니다. 일단은 코드를 써보면서 guard let을 이해해 보겠습니다. 위와 비슷한 코드를 하나 짰습니다. 옵셔널 상수 x와 옵셔널 상수 y에 각각 10과 nil로 초기화 해주고 이번에는 guard let을 써서 옵셔널을 추출했습니다. if let과 구문은 비슷하지만 guard let에서는 else인 부분만 작성이 가능합니다. 즉, 값이 nil이여서 옵셔널 추출이 되지 않을때만 어떠한 행동을 취할 수 있죠. 그리고 만약 nil값이 아닐 걸 확인하고 옵셔널을 성공적으로 추출했다면 guard let문을 통과하게 되게 되는 거죠! 여기서 한가지 중요한 점이 있었는데 이렇게 guar..

🦜 Swift 2022.11.19

[Swift] if let

옵셔널 값 추출 옵셔널 바인딩이란 강제로 옵셔널을 여는 방식(Force unwrapping)이 아닌 안전하게 확인을 해보고 unwrapping하는 방법입니다. 즉, if문을 이용하여 옵셔널에 할당된 값을 임시 변수 또는 상수에 할당을 해주는 방식입니다. Force unwrapping : !를 써서 강제로 옵셔널 추출 Optional Binding : if let, guard let을 써서 옵셔널 추출 if let 또는 if var 을 사용하여 옵셔널의 값이 존재하는지를 검사한 뒤, 존재한다면 그 값을 다른 변수에 대입시켜줍니다. 만약 옵셔널에 값이 있다면 if문 안으로 들어가게 되고 nil이라면 그냥 통과하게 되는 방식이죠!! 이렇게 확인을 해주고 unwrapping을 해준다면 강제로 unwrapping..

🦜 Swift 2022.11.18