Mobile/ios & swift

[Swift 4] Optional Chaining(3) - 옵셔널 체이닝을 이용하여 메소드 호출하기

버리야 2018. 3. 20. 01:00
반응형

이 포스팅은 The Swift Programming Language (Swift 4.1) 의 Optional Chaining 문서를 보고 이해하며 제 것으로 만들면서 정리해 놓은 문서입니다.



원문 

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html#//apple_ref/doc/uid/TP40014097-CH21-ID245



옵셔널 체이닝을 이용하여 메소드 호출하기(Calling Methods Through Optional Chaining)


옵셔널 체이닝으로 옵셔널 값에서 메소드 호출하고, 메소드 호출이 성공하는지 확인 할 수 있다. 리턴 값을 정의하지 않은 메소드도 가능하다.

 

func printNumberOfRooms() {
    print("The number of rooms is \(numberOfRooms)")
}

이 메소드는 리턴 타입을 지정하지 않는다. 

하지만, 리턴 타입 없는 함수(Functions Without Return Values)에서 설명한것 처럼, 리턴 타입이 없는 함수와 메소드는 암시적으로 Void타입을 반환한다. 

이것은 ()값 또는 빈 튜플을 반환하는 것을 의미한다.


옵셔널 체이닝으로 옵셔널 값으로 메소드를 호출하면, 옵셔널 체이닝으로 호출될때, 리턴 값은 언제나 옵셔널 타입이기 때문에, 메소드의 리턴 타입은 Void가 아니라, Void?가 될 것이다.


이는 if문을 이용하여 printNumberOfRooms()메소드를 호출 할 수 있는지 확인할 수 있으며, 메소드가 리턴 값을 정의하지 않았더라도 가능하다.

메소드 호출이 성공하는지를 보기 위해, printNumberOfRooms의 리턴 값이 nil이 아닌지 비교한다.


 

if john.residence?.printNumberOfRooms() != nil {
    print("It was possible to print the number of rooms.")
} else {
    print("It was not possible to print the number of rooms.")
}
// Prints "It was not possible to print the number of rooms."

옵셔널 체이닝으로 프로퍼티를 설정하는 경우에도 마찬가지이다. 

위의 옵셔널 체이닝을 통하여 프로퍼티 접근하기(Accessing Properties Through Optional Chaining) 예제는 residence프로퍼티가 nil일지라도, john.residence에 대한 address값을 설정하려고 한다.


옵셔널 체이닝으로 Void?타입의 반환된 값으로 프로퍼티에 설정을 시도하며, 프로퍼티 설정이 성공하는지 보기 위해 nil인지 비교하는 것이 가능하다.


 

if (john.residence?.address = someAddress) != nil {
    print("It was possible to set the address.")
} else {
    print("It was not possible to set the address.")
}
// Prints "It was not possible to set the address."


반응형