Swift 개발 첫 편-이상 처리 및 단언

5496 단어
이 편은 두 부분으로 나뉜다.

1. 오류 및 예외 처리


2. Swift의 단언


 

1. 오류 및 예외 처리


OC 개발에서, 우리는 통상적으로 error를 nil로 설정한다
NSError *error;
BOOL success = [data writeToFile: path options: options error: &error];
if(error) {
    //  
}

 
절대 다수의 경우, 이 방법은 아무런 오류가 발생하지 않기 때문에, 우리는 error를 직접nil로 설정합니다.하지만 오류가 발생하면 디버깅을 할 수 없을 수도 있습니다.Swift에 이상 메커니즘을 도입했습니다. 이것은 우리 오래된 프로그래머들이 매우 친절함을 느끼게 합니다. 왜냐하면 자바나 C#에서 우리는 자주 사용하기 때문입니다.하지만 자바와 달리 스위프트에서 쓰는 것은 도...catch 문법, 그리고 이상한 곳에서 튀어나올 수 있는try로 수식하고, 자바에서 이상한 코드 블록을 던질 수 있는try...catch 중.swift는 자바에 비해 이상 코드의 줄 수를 더 빨리 잠그고, 자바는 한 걸음 한 걸음 디버깅을 해야 try를 발견할 수 있습니다.catch에서 그 문장에 오류가 발생했지만 이것은 장점이라고 생각하지 않습니다. 만약에 Swift에서 여러 군데가 같은 이상을 던지고 모든 문장을 수식하면 코드가 비대해질 수 있습니다.
enum LoginError: ErrorType {
    case UserNotFound, UserPasswordNotMatch
}
func login(user: String, password: String) throws {
    if 1 < 2 {
        throw LoginError.UserNotFound
    }
    if 2 > 1 {
        throw LoginError.UserPasswordNotMatch
    }
    print("Login successfully.")
}

do {
    try login("onevcat", password: "123")
} catch LoginError.UserNotFound {
    print("UserNotFound")
} catch LoginError.UserPasswordNotMatch {
    print("UserPasswordNotMatch")
}

 
 

2. Swift의 단언


단언(assertion)은 코코아 개발에서 입력 파라미터가 일정한 조건을 충족시키는지 검사하고 이를 논단하는 데 사용되며 개발자 간의 소통 효율을 향상시키는 데 사용된다.
일부 입력 파라미터가 조건을 충족시키는지 판단할 때, 우리 프로그래머는 일반적으로if와 같은 조건 제어로 검사하고, 계속할 수 없는 상황에 부딪히면 미리 되돌아오거나 오류가 발생합니다.그러나 이로 인해 운행할 때의 추가 비용이 발생하기 때문에 입력 파라미터가 조건에 충족되는지 판단하는 것과 같은 상황에 대해 우리는 단언으로 처리하는 것이 더욱 좋을 것이다.
swift에서 제공하는 단언 방법:
func assert(@autoclosure condition: () -> Bool,
 @autoclosure _ message: () -> String = default,
 file:StaticString = default,
 line: UInt = default)

 
예를 들어 우리의 나이는 0살 미만이어서는 안 된다.
func convertAge(age: Int) -> Int {
    assert(age < 0, " 0 ")
    return 0
}

let xiaoMingAge = convertAge(-10)

//  :
// assertion failed:
//  0 

 
단언의 가장 기본적인 역할:
처리할 수 없는 입력을 만났을 때, 실행에 오류가 발생하고, 우리가 미리 설정한 정보를 던져서 이 코드를 호출하는 엔지니어에게 알립니다.
단언의 특징:
사용자 정의된 NSLog와 유사하게 Debug 컴파일할 때만 유효하고 실행할 때는 컴파일되지 않기 때문에 실행할 때의 성능을 소모하지 않습니다.이러한 특징 때문에 단언은 프로그래머를 대상으로 디버깅 개발 단계에서 매우 적합한 디버깅 판단이라고 할 수 있으며, 코드가 발표될 때, 우리도 이 단언들을 수동으로 제거할 필요가 없다.
만약 우리가 Debug 모드에서 단언을 강제로 사용하지 않으려면, 대응하는 target의 Build Setting에서, 우리는 Swift Compiler-Custom Flags의 Other Swift Flags에 -assert-config Release를 추가하여 단언을 강제로 사용하지 않거나, -assert-config Debug를 사용하여 단언을 강제로 사용합니다.(이렇게 하는 것을 건의하지 않는다)
 
참고: OC의 단언 함수인 NSAssert가 Swift에서 제거되었습니다.

좋은 웹페이지 즐겨찾기