2014-08-29 5 views
21

스위프트에서는 모듈이 네임 스페이스 역할을하므로 더 이상 prefix classes 일 필요는 없습니다.접두어 확장 기능

접두사 확장 기능은 어떻게됩니까? 예를 들면 다음과 같습니다.

extension UIImage { 

    public func hnk_hasAlpha() -> Bool { ... } 

} 

반면에 스위프트는 동적이 아니므로 충돌은 컴파일러 오류를 생성합니다.

하지만 내 확장 방법 중 하나가 추가 된 향후 iOS/OS X 버전에서 컴파일 된 코드가 실행되면 어떻게됩니까? 서로 다른 모듈의 메소드가 동일한 서명을 가지고 있더라도 서로 다른 심볼로 간주됩니까?

확장 클래스가 NSObject 하위 클래스 또는 순수 Swift 클래스 인 경우 차이가 있습니까? 오브젝티브 C 유형의

확장을 의미하는 모두와 함께, 오브젝티브 C 범주로 구현됩니다 : 여기에 몇 가지 미묘있다

+0

왜 Apple에서 제공 한 클래스에 기능을 추가하는 것이 좋은 생각입니까? 왜 함수를 작성하지 않는가? 미래의 개발자가이 코드를 사용하는 것은 분명합니다. 또는 하위 클래스. – zaph

+12

좋은 생각인지 아닌지는 질문의 기술적 측면과 관련이 없습니다. 스위프트는 이러한 종류의 충돌을 어떻게 처리합니까? 즉, 필자는 Apple 클래스를 확장하는 것이 심볼의 범위를 제한하면서 함수의 컨텍스트를 개선하고 래퍼 객체를 사용하지 않고 사용자 정의 프로토콜을 구현하는 데 유용하다고 생각합니다. – hpique

답변

20

.

그러나 Swift 유형의 확장은 가져 오기 때문에 표시되는 경우에만 적용됩니다. 즉, 사적인 시스템 메소드 (현재 또는 향후 도입 될 예정)에 실수로 stomp 할 수없고, 시스템이 자신과 같은 이름으로 공용 메소드를 도입하면 컴파일 타임에 실패 할 수 있습니다. 재 구축하지만 기존 앱이 중단되지 않습니다.

+0

감사합니다. 근원이 있니? – hpique

+2

기억하지 마십시오. tbh. dev 포럼의 일부 조합과 신속하게 작업하는 사람들과 이야기하기. –

+0

@hpique이 문서 확인하기 : https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID35 section ' 확장 기능 '. 마지막 문장에 '확장을 사용하여 Objective-C 유형의 기존 메서드 또는 속성을 재정의 할 수 없습니다.' 충돌하는 서명이 있으면 컴파일러에서 오류를 반환합니다. – lukewar