-
[작성중] [Swift] Optional Unwrapping - 옵셔널 바인딩(if let vs guard let)► Swift 2023. 6. 30. 20:10반응형
두서없이 써논 글입니다!
/* swift */ /* [1.optional binding] swift에서 정말 많이 씀 안전하게 optional 값을 unwrapping 할 수 있음 (아래의 3가지 Syntax 활용) */ /* if let name: Type = OptionalExpression { } while let name: Type = OptionalExpression{ } guard let name: Type = OptionalExpression else{ } */ //while문은 거의 사용안해서 제외하고 설명 let optionalNum1: Int? = 4 //4 let optionalNum2: Int? = nil //nil //[ 2.if let ] let optionalNum:Int? = 4 //let optionalNum: Int? = nil if let nonOptionalNum = optionalNum { // The 'optionalNum' is not nil print(optionalNum) //Optional(4) print(nonOptionalNum) //4 } else { // The 'optionalnum' is nil print(optionalNum) } /* optionalNum은 여전히 Optional type nonOptionalNum은 optionalNum을 unWrapping한 값 */ /* nil이 아니면 if let 스코프 nil이면 else 스코프 */ /* 1. if let줄에 optionalNum에서 nil 체크. 2. nil이 아니면 unwrapping한 값을 nonOptionalNum으로 대입함. 3.nil이면 if구문을 거치지 않고 else로 이동. 고러므로 nonOptionalNum은 사용불가 */ /* tips 1. optionalnum과 nonOptionalNum 을 각각 이름짓기 번거로와서 똑같이 써도 됨. 2. 여러개의 옵셔널 타입을 바인딩 할 수 있음. name, age 모두 nil이 이나여야 if구문이 true가 됨. let name: String? = nil let age: Int? = nil if let name = name, let age = age{ } 3. condition을 넣어 줄 수 있음. name,age가 nil 이여야하고, age 값이 5보다 커야 true if let name = name, let age = age, age > 5{ } */ //[3. guard let] //quard문은 특성상 함수(메서드)에서만 쓰이며, guard 구문의 조건을 만족하지 못하면 else문으로 빠져서 함수를 종료시킬때 사용함(return) //guard문은 함수안에서만 작동함. 아래 예제는 함수밖에 구현한거라 참고만하기. let op: Int? = 4 guard let nonOp = op else { // The 'op' is nil return } print(nonOp) //The 'op' is not nil /* 1. op이 nil인지 체크 2. nil이 아니니 경우, else로 빠지지 않고 guard문 밖으로 나옴 print(nonOp)이 4라고 출력됨 3.nil인 경우, else로 빠져서 return함. else에서는 nonOp 사용 불가. */ /* op은 여전히 Optional type nonOp의 scope은 guard 구문밖이기때문에 밖에서만 사용가능. */ /* guard let도 if let과 같이 nonOptional type과 optional type의 이름을 같게 사용할 수 있음. 단, 함수(메서드)의 매개변수로 들어온 표현식에 한해서만 가능 그외에는 안됨. scope문제일거라고 추측하지만 잘 모르겟음 --- 가능한경우 함수(메서드)로 넘어온 파라미터 값(임시 상수 혹은 변수)를 바인딜할 경우 func test(_ name:String?){ guard let name = name else { return } print(name) } --- 불가능한 경우 함수(메서드) 내에서 선언한 상수 혹은 변수를 바인딩할 경우 func test() { let num: Int? = 4 guard let num = num else { return } } */ /* if let처럼 옵셔널바인딩을 하나의 guard문에 연속으로 사용할 수도 있고, condition을 넣을 수 있음 func test(_ name: String?, _ age: Int?){ guard let name = name, let age = age, age < 5 else { } } */ // ..... //참고링크: https://babbab2.tistory.com/17
반응형'► Swift' 카테고리의 다른 글
[작성중] [Swift] 초보공부자료 (0) 2023.06.30 [작성중] [Swift] playground_코드 연습하는 법 (0) 2023.06.30 [작성중] [Swift] optional unwrapping, 강제추출(forced upwrapping) (0) 2023.06.28 [작성중] [Swift] 에러처리 error handling (0) 2023.06.28 [작성중] [Swift] non-optional type, optional type, nil (0) 2023.06.28