Ich bin darüber verwirrt, sollte ich gebraucht werden NSObject
swift3. Wenn ja, bitte führe mich auch an, es ist die beste Praxis zu benutzen NSNumber
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)
// }
// }
}
Hinweis : Könnten Sie mir bitte sagen, warum NSObject verwendet werden muss? was ist der vorteil
Antworten:
1 für die Antwort № 1NSObject-Klasse:
Diese Klasse ist die Stammklasse der meisten Objective-C-Klassenhierarchien, von der aus Unterklassen eine grundlegende Schnittstelle an das Laufzeitsystem erben und die Fähigkeit haben, sich als Objective-C-Objekte zu verhalten. (Quelle).
AnyObject-Protokoll: Es ist eine implizite Bestätigung eines Objekts.
Sie verwenden AnyObject, wenn Sie die Flexibilität benötigeneines nicht typisierten Objekts oder wenn Sie überbrückte Objective-C-Methoden und -Eigenschaften verwenden, die ein nicht typisiertes Ergebnis zurückgeben. AnyObject kann als konkreter Typ für eine Instanz einer Klasse, eines Klassentyps oder eines Nur-Klassen-Protokolls verwendet werden.
AnyObject kann auch als konkreter Typ für eine Instanz eines Typs verwendet werden, die eine Bridge mit einer Objective-C-Klasse verbindet.
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"
Das flexible Verhalten des AnyObject-Protokollsist ähnlich dem ID-Typ von Objective-C. Aus diesem Grund verwenden importierte Objective-C-Typen häufig AnyObject als Typ für Eigenschaften, Methodenparameter und Rückgabewerte. (Quelle)
So können Sie verwenden NSNumber
variabel wie AnyObject
das kann später implizit entsprechend gegossen werden.
0 für die Antwort № 2
Sie überschreiben eine Superklassenmethode:
override func setValue(_ value: Any?, forKey key: String) { }
Wenn Ihre Klasse also nicht erweitert wird NSObject
Klasse, wie könnte die Superklasse-Methode überschrieben werden?
Sie konnten nicht verlängern NSObject
Klasse, aber Sie müssen entfernen override
Schlüsselwort seit Code setValue
würde eine Methode Ihrer benutzerdefinierten Klasse werden. Wenn Sie es tun, können Sie nicht anrufen super.setValue(value, forKey: key)
offensichtlich.