/ / Warum muss NSObject verwendet werden? - ios, schnell, schnell3

Warum müssen Sie NSObject verwenden? - ios, schnell, schnell3

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 № 1

NSObject-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.