Ich versuche, eine Swift-Klasse zu implementieren, mussSwift: Typ XXX-Protokoll entsprechen müssen ‚NSObjectProtocol‘
- Vererben von einer Objective-C-Klasse
- ein Objective-C-Protokoll mit Klassenvariable implementieren.
Obwohl die Objective-C-Klasse-I-Subklassen sind von NSObject erbt, erhalte ich folgende Kompilierungsfehler:
Type DDBItem must conform to protocol 'NSObjectProtocol'
Das Objective-C-Klasse und Objective-C-Protokoll Ich bin vererben/erhältlich bei https://github.com/aws/aws-sdk-ios/blob/master/DynamoDB/AWSDynamoDBObjectMapper.h
AWSDynamoDBModel implementieren hat eine lange Kette von Erbschaft, die schließlich beginnt mit NSObject AWSDynamoDBModeling enforc ist zwei Klassenvariablen.
Mein Code ist
class DDBItem : AWSDynamoDBModel, AWSDynamoDBModeling {
// class var dynamoDBTableName : String { get { return "" }}
// class var hashKeyAttribute : String { get { return "" }}
class func dynamoDBTableName() -> String! {
return ""
}
class func hashKeyAttribute() -> String! {
return ""
}
}
Bonus Frage: Beim Versuch, das Objective-C-Protokoll beauftragt Klassenvariablen als Swift Klassenvariablen zu implementieren, erhalte ich einen Übersetzungsfehler:
Type DDBItem must conform to protocol 'AWSDynamoDBModeling'
Ausführungs sie als Funktion scheinen akzeptiert zu sein. Warum ?
Für die zweite Frage Eigenschaft ist nur Syntax Zucker, wenn Ich denke, der Compiler hat die Syntaxzuckerkartierung für die OC-Eigenschaft durchgeführt, um sie zu einer Eigenschaft in Swift zu machen.Aber es gibt keine Klassenstufe Eigenschaft in OC und die +() ist eine Methode, die der Compiler ordnet es nur zu einer schnellen Klasse Level-Methode. Es kann nur mit A.classmethod() aufgerufen werden. – Shuo
Für die erste Frage habe ich keine Ahnung, was passiert ist. Auch wenn Sie von MTLModel erben, die direkt von NSObject erben, ist der Fehler weiterhin vorhanden. Das heißt, das tiefe Nest ist nicht das Problem, sondern die MLTModell-Implementierung. – Shuo
Guter Punkt, ich werde MLTModel Implementierung betrachten –