2015-01-24 4 views
0

나는이 목표 - C 코드에서 스위프트 클래스를 사용과 지속 문제 :재산권 스위프트 클래스에 표시되지

다음과

스위프트 클래스는 보이는 :

@objc class TestClass { 
    private (set) var key: UInt64 
    private (set) var dict: [UInt64 : Double]! = [:] 

    init(key: UInt64, value: Double) { 
     self.key = key 
     self.dict[key] = value 
    } 
} 

test.dict과 함께 Objective-C에서 사용하려고하면 (Xcode 6.1.1의) 컴파일러가 Property 'dict' not found on object of type 'TestClass'이라는 오류를 표시합니다.

생성 된 MyProject-Swift.hkey을 말하지만, dict은 아닙니다. 여기에 관련 발췌은 다음과 같습니다

@interface TestClass 
@property (nonatomic, readonly) uint64_t key; 
- (instancetype)initWithKey:(uint64_t)key value:(double)value OBJC_DESIGNATED_INITIALIZER; 
@end 

이 이전 버전 (내가 keydict를 추가 한)에 충실 없지만, 더 이상 스위프트의 정의를 반영한다. 그러나이 문제는 빌드 단계의 순서와 관련이없는 것처럼 보입니다. private (set) var key2: UInt64 속성을 추가하면 MyProject-Swift.h에 표시됩니다. 프로젝트를 정리하고 다시 빌드하는 것은 도움이되지 않습니다 (Xcode를 다시 시작하지는 않습니다).

이 경우 Objective-C와 Swift 사이에 내 코드와 브리징의 문제점은 무엇입니까? dict이 Swift (Objective-C 또는 @objc) 사전으로 정의 되었기 때문에 그럴 수 있습니까? 그렇다면 코드를 리팩토링하여 어떻게 진행할 수 있습니까?

답변

2

내가 잘못하지 않았다면 사전은 Objective-C에 매핑 할 수없는 유형을 사용합니다.

documentation는 말한다 : 당신이 캐스팅

[...] 키와 값은 클래스의 인스턴스 클래스 또는로 브리지의 인스턴스 여야 스위프트 사전에서있는 NSDictionary 객체 에 . 그런 다음 사전 속성은 브리지 헤더에 표시됩니다

private (set) var dict: [NSNumber: NSNumber]! = [:] 

:

당신은 같은 선언이 필요합니다.

+0

인용 된 문서에 대한 정확한 링크를 추가 한 다음 귀하의 답변을 수락 할 수 있습니까? – Drux

+0

여기서'사생활'은 무엇을 의미합니까? – zaph

+2

@Zaph setter에게 getter보다 낮은 액세스 레벨 ('private')을줍니다 ([here] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html 참조).)). – Drux