2014-06-10 3 views
0

제네릭 형식의 개체를 포함하는 배열을 소유하는 클래스를 작성하려고합니다. 나는 지금까지 실패했다. 내가하는 일이 여기에있다 :일반 언어 배열을 스위프트 언어로 인스턴스화 할 수 없습니다.

프로그램을 컴파일하고 사전 실행하면서 세그먼트 화 오류가 발생한다. 내가 일반화하지 않는 경우, 모든이가 내가 종류의 다양한 문제를 해결하기 위해 가지고,하지만 먹고 싶어 접근 방식이 아닌 문제

class NonGenericTest: NSObject { 
    var objects = String[]() 
} 

var buffer = NonGenericTest() 

없이 컴파일합니다. 이게 왜 깨지는 지 아십니까?

+4

Obj-C 호환성을 가져야하는 경우'NSObject'에서 상속하지 말고'class' 정의에'@objc' 접두어를 사용하십시오. 스위프트의 제네릭이 오래된 Obj-C 구문과 잘 어울리지 않는다는 것을 알았습니다. – Erik

+1

@SiLo 응답으로 입력하면이 표시가 올바른 것으로 표시됩니다. – banDedo

답변

3

Swift에서 제네릭 클래스를 사용하는 경우 NSObject에서 상속하는 것은 좋은 생각이 아닙니다. 당신이 꼭해야만하지 않는 한, 스위프트 클래스에서 그렇게하지 말 것입니다. Obj-C와의 호환성이 필요하다면 Obj-C에서 호출 할 메소드와 함께 @objc 접두어로 클래스를 표시하십시오.

바보하지만 ... 그래 :

@objc class MyGeneric<T> 
{ 
    var array = T[]() 
} 

var buffer = MyGeneric<String>() 
당신은 당신이 제네릭 형식 매개 변수로 원하는 어떤 다른 NSString, NSDictionary과 같은 기초 클래스를 사용할 수 있습니다,하지만 난 일반에 NSObject에서 상속에 대해 추천 할 것입니다

클래스 정의.

관련 문제