Swift의if문에where를 사용할 때의else 조건

6581 단어 SwiftiOS
※ 스위프트 버전 1.2 정도의 이야기이니 댓글을 참조하세요

Where 사용 시 else 조건


Swift1.2부터if문은where를 사용할 수 있습니다.
이렇게 하면 Optional 변수를 끼워 넣지 않고 마운트 해제한 후 내용을 판정할 수 있다.
그러나 이 경우else문이 언로드 후 내용이 없는 경우인지, 아니면 where의 판정이 거짓인지 의문이 들어 조사했다.
func test(token: String?) {
    if let t = token where t.isEmpty {
        println("token is empty")
    } else {
        println("token is nil or not empty")
    }
}

// 結果
test("")    // -> token is empty
test("xxx") // -> token is nil or not empty
test(nil)   // -> token is nil or not empty
그 결과 마운트 해제 후 내용이 없는 경우와where의 판정이 가짜로 변한 경우는 모두else에 들어갔다.(당연하지)

다 헤어져야 돼


모두 떼어놓으려면 다음과 같은 내용을 써도 되지만 더 이해하기 어렵다.
func test(token: String?) {
    if let t = token where t.isEmpty {
        println("token is empty")
    } else if token == nil {
        println("token is nil")
    } else {
        println("token is not empty")
    }
}
솔직하게 끼워 넣는 게 좋아요.
func test(token: String?) {
    if let t = token {
        if t.isEmpty {
            println("token is empty")
        } else {
            println("token is not empty")
        }
    } else {
        println("token is nil")
    }
}

switch 문으로 쓰기 (추기)


@Ushio@github선생님이 저에게 주신 평어입니다.
Switch 문으로 예쁘게 나눠서 볼 수 있어요. 이게 제일 보기 쉬워요.
func test(token: String?) {
    switch token {
    case let .Some(value) where value.isEmpty:
        println("token is Empty")
    case let .Some(value):
        println("token is Not Empty")
    case .None:
        println("token is nil")
    }
}

test("")
test("token")
test(nil)

/*
token is Empty
token is Not Empty
token is nil
*/

좋은 웹페이지 즐겨찾기