2016-12-30 2 views
0

swift3에 NSObject을 사용해야한다고 혼란 스럽습니다. 그래서 저를 인도하십시오 또한 사용하는 것이 가장 좋습니다 NSNumber왜 NSObject를 사용해야합니까?

class App: NSObject { 

     var id: NSNumber? 
     var name: String? 
     var category: String? 
     var imageName: String? 
     var price: NSNumber? 

     var screenshots: [String]? 
     var desc: String? 
     var appInformation: AnyObject? 

     // override func setValue(_ value: Any?, forKey key: String) { 
     //  if key == "description" { 
     //   self.desc = value as? String 
     //  } else { 
     //   super.setValue(value, forKey: key) 
     //  } 
     // } 

    } 

참고 : 당신이 왜 NSObject의를 사용해야하시기 바랍니다 말해 수 있을까? 이점은 무엇입니까?

+0

함수'setValue (_ : forKey :) '를 오버라이드하려면 NSObject 여야합니다. – Desdenova

+0

@Desdenova는 내 질문을 업데이트합니다! NSObject를 사용해야하는 이유를 말해 주시겠습니까? 이점은 무엇입니까? –

+0

귀하의 의견을 이해 한 후에 귀하의 질문을 이해할 수 없습니다. 당신은'NSObject'를 사용할 필요가 없으며 클래스조차 필요하지 않습니다. 구조체는 이들을 유지할 수 있습니다. – Desdenova

답변

0
당신은 슈퍼 클래스 메소드 오버 라이딩

: 클래스하지 NSObject 클래스를 확장 않을 경우

override func setValue(_ value: Any?, forKey key: String) { } 

그래서, 어떻게 그 슈퍼 클래스 메소드를 오버라이드 (override) 할 수 있습니까?

NSObject 클래스를 확장 할 수는 없지만 setValue이 맞춤 클래스의 메소드가되므로 코드에서 override 키워드를 제거해야합니다. 전화를 걸면 super.setValue(value, forKey: key)으로 분명히 전화 할 수 없습니다.

+0

감사합니다. 내 질문을 업데이트합니다. 당신은 그것을 확인해 주시겠습니까 –

+0

'setValue' 메서드에 대해 주석을 달았습니다. 무엇을 확인해야합니까? – lubilis

+0

또한 NSNumber를 사용하는 것이 가장 좋습니다. –

1

NSObject의 클래스 :

이 클래스는 서브 클래스가 런타임 시스템과 같은 목적-C 객체를 작동 할 수있는 기능에 대한 기본 인터페이스를 상속있는 대부분의 Objective-C 클래스 계층 구조의 루트 클래스입니다. (source).

AnyObject 프로토콜 : 임의의 개체에 대한 암시적인 확인.

형식 지정되지 않은 개체의 유연성이 필요하거나 형식화되지 않은 결과를 반환하는 Bridged Objective-C 메서드 및 속성을 사용할 때 AnyObject를 사용합니다. AnyObject는 클래스, 클래스 유형 또는 클래스 전용 프로토콜의 인스턴스에 대한 구체 유형으로 사용할 수 있습니다.

AnyObject는 Objective-C 클래스에 연결되는 유형의 인스턴스에 대한 구체 유형으로 사용할 수도 있습니다.

let s: AnyObject = "This is a bridged string." as NSString 
print(s is NSString) 
// Prints "true" 

let v: AnyObject = 100 as NSNumber 
print(type(of: v)) 
// Prints "__NSCFNumber" 

AnyObject 프로토콜의 유연한 동작은 Objective-C의 id 유형과 유사합니다. 이러한 이유 때문에 가져온 Objective-C 유형은 속성, 메소드 매개 변수 및 반환 값의 유형으로 AnyObject를 자주 사용합니다. (source)

따라서 으로 변수를 사용할 수 있습니다.이 변수는 나중에 암시 적으로 적절하게 유형 변환 할 수 있습니다.