2014-11-12 7 views
2

코코아 바인딩에서 액세스 할 수있는 정렬 된 컬렉션을 갖기 위해 NSObject을 서브 클래 싱합니다. 내 수업은 다소 비슷해 보입니다.Swift에서 하위 클래스로 만들 때 NSObject의 설명 속성을 무시하려면 어떻게해야합니까?

public class OrderedCollection<Tk: Hashable, Tv> : NSObject { 

    var keys: Array<Tk> = [] 
    var values: Dictionary<Tk,Tv> = [:] 

    override init() { 
     super.init() 
    } 

    // Subscript methods go here 

    override public var description: String { 
      var result = "{\n" 
      for i in 0..<self.count { 
       result += "[\(i)]: \(self.keys[i]) => \(self[i]!)\n" 
      } 
      result += "}" 
      return result 

    } 

} 

컴파일되지 않습니다. 오류 : '@objc' getter for non-'@objc' property.

getter를 '@ objc'가 아닌 것으로 만드는 방법이 있습니까? 나는 Objective-C에서 접근 할 수있는 속성을 필요로하지 않는다 ...

+0

수 없습니다. 일반 클래스는 Objective-C와 호환되지 않습니다. –

+0

[스위프트의 제네릭 클래스에서 NSCoding을 구현하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/25338484/how-to-implement-nscoding-on-a-generic-class-in-swift) –

+0

제네릭 클래스는 ObjC와 호환되지 않는다는 것을 알고 있습니다. 그럼에도 불구하고, 문서에서 (적어도 내가 찾을 수 있었다), Swift에서 사용하기 위해 ObjC 클래스를 하위 클래스로 서브 클래 싱 할 수 없다고하고, 사실 내가 Swift에서 사용할 때까지 컴파일하고 컴파일하지 않는다고 설명을 무시하십시오. – estradin

답변

0

그것은 완전히 다른 질문의 코멘트에 대한 대답 인 것 같다.

class BaseNSObjectWithDescriptionFix: NSObject { 
func makeDescription() -> String { 
    return super.description 
} 

override var description: String { 
    return makeDescription() 
} 
} 

지금 방금 대신 NSObject의의 BaseNSObjectWithDescriptionFix를 사용하고 당신이 원하는대로 makeDescription를 오버라이드 (override) : https://stackoverflow.com/a/26688572/4180258

기본적으로, 추한 해결의 비트가있다. 내 경우

, 나는 때문에 내 목적을 위해 내가 [String][String:AnyObject]를 사용할 수 필요하지 않았다, 그러나 이것은 미래의 누군가에게 일부 사용 될 수있다.

public class OrderedCollection<Tk: Hashable, Tv>: NSObject {  
    override public var description: String { 
     return "hello" 
    } 
} 

또한, 대신에 부합 수 : 당신은 당신의 클래스를 공개 유지 같은 두 가지 일반적인 유형, 스위프트의 서브 클래스 때

0

NSObject의 설명 속성을 무시하려면, 당신은 단지이 필요 CustomStringConvertible 프로토콜 (이전, 사전 스위프트 Printable로 알려진 2) 및과 같이, NSObject의 잊지 : 즉

public class OrderedCollection<Tk: Hashable, Tv>: CustomStringConvertible { 

    public var description: String { 
     return "hello" 
    } 
} 

가, 제네릭 정말이 사건에 대해 아무 것도 변경하지 마십시오. (어떤 것이 이전 버전의 Swift에서 다른 것인지 확실하지 않은 경우 ...)

내용 description 내용 (위의 경우 count 속성이 없어서 더 많은 코드가 생략 된 것 같습니다. 단지 첨자 방법보다).

관련 문제