[Project Name]-Swift.h라는 헤더 파일을 생성해 이를 인터페이스로 삼아 스위프트 코드에 접근합니다. 다만 모든 스위프트 코드를 Objective-C에서 사용할 수 있는 것은 아닙니다. 스위프트에서만 가능한 타입들은 사용이 배제됩니다. 호환이 안되는 type의 인자가 들어가 있는 메소드는 bridge header에 생성되지 않습니다. 

따라서 Objective-C에서 사용 가능한 Swift 코드를 만들기 위해선 스위프트 타입 호환성을 잘 고려해서 코딩해야 합니다. 다음 문서는 스위프트 타입 호환성에 대해 상세히 기술하고 있습니다. 


옵셔널
객체만 옵셔널로 사용 가능합니다. 메소드 인자에 옵셔널이 있는 경우 이를 nullable로 바꾼다고 나와 있지만 이는 객체에만 해당합니다. 옵셔널의 태생 자체가 nullable의 범위를 primitive type과 enum type 등으로 넓히기 위해 태어난 것이기 때문입니다.

프로토콜
프로토콜에 @objc를 붙여서 선언해야만 사용할 수 있습니다.

enum
enum type이 Int가 아닐 경우 사용할 수 없습니다.

기타 사항은 문서 참조

'Tech > iOS' 카테고리의 다른 글

[Swift] Class와 Struct 중에 뭘 쓸까?  (0) 2016.10.28
@noscape, @autoclosure  (0) 2016.10.24
optional을 쉽게 설명해보자  (0) 2016.05.17
Hashable Protocol  (0) 2016.02.28
Objective-C 시절부터 immutable 사용이 강조되어 왔습니다. 변하지 않는 값의 사용이 증가할수록 에러 확률이 줄고 컴파일러 또한 보다 적극적으로 최적화할 수 있기 때문입니다. class는 reference type이고 struct는 value type입니다. 가능하다면 mutability control 측면에서 struct를 사용하는 것이 권장됩니다.

애플 문서에서는 다음과 같을 때 struct를 쓰라고 권장하고 있습니다. 

  • 관련있는 간단한 데이터를 encapsulation
  • 값이 reference 되지 않고 copy되는 것이 더 타당한 경우
  • struct에 저장된 property들 역시 value type인 것이 자연스러움
  • 기존의 type에서 상속될 필요가 없는 경우


'Tech > iOS' 카테고리의 다른 글

스위프트 타입 호환성  (0) 2017.01.11
@noscape, @autoclosure  (0) 2016.10.24
optional을 쉽게 설명해보자  (0) 2016.05.17
Hashable Protocol  (0) 2016.02.28
Closure는 reference type이다. 한번 생성되어 var / let으로 대입된 것은 별도의 instance로 존재하며 다른 곳에 대입되어도 reference 된다.

@noescape
closure를 parameter로 전달받은 함수는 그 closure를 함수 안에서만 사용하고 바로 파기한다는 것을 명시
closure를 보관하지 않기 떄문에 retain cycle 문제에서 자유로움
compiler가 closure의 수명에 대해서 더 많은 정보를 받으므로 더욱 적극적인 optimizing을 하게 됨

@autoclosure
parameter가 없고 return이 있는 closure를 받는 function은 closure를 autoclosure로 선언할 수 있음
func printNextValue(@autoclosure value: () -> String) {

}

autoclosure를 사용하게 선언되어 있는 function을 호출할 때는 closure 대신 간단한 구문을 사용할 수 있음
printNextValue(values.remove(at: 0))

해당 구문 자체가 자동으로 closure가 되어 전달
func printNextValue(@autoclosure value: () -> String) {
     NSLog(“value \(value())”)
}

구문을 작성한 시점에 동작이 일어나지 않고 전달된 closure가 실행되는 시점에 동작이 일어남. 지연해서 실행할 필요가 있을 때 유용

주의 : 코드의 실행이 읽는 위치에서 바로 되는 경우가 아닌데다 closure인지 인지하지 못할 가능성이 높아 가독성을 매우 떨어뜨림


출처 : 애플 도큐먼트

'Tech > iOS' 카테고리의 다른 글

스위프트 타입 호환성  (0) 2017.01.11
[Swift] Class와 Struct 중에 뭘 쓸까?  (0) 2016.10.28
optional을 쉽게 설명해보자  (0) 2016.05.17
Hashable Protocol  (0) 2016.02.28

+ Recent posts