Buď vidím nejaké zvláštne správanie od spoločnosti Swift, alebo robím niečo zlé.
Povedzme, že máte triedy obj-c s názvom TurtleHelper, ktorá vyzerá takto:
@interface TurtleHelper : NSObject
+(NSDictionary*)getTurtles;
@end
Potom chcem túto metódu prepísať v Swift, a tak to urobím:
class SwiftTurtles: TurtleHelper {
override class func getTurtles() -> NSDictionary {
...
}
}
Prekladač hodí na mňa nasledujúcu chybu:
Nadradená metóda s selektorom getTurtles má nekompatibilný typ "() -> NSDictionary"
Čo robím zle?
odpovede:
7 pre odpoveď č. 1Ukázalo sa, že odpoveď sa zdá byť
override class func getTurtles() -> [NSObject : AnyObject]!
Z dokumentácie spoločnosti Apple:
Keď premostete z objektu NSDictionary na aSwift slovník, výsledný slovník je typu [NSObject: AnyObject]. Môžete prepojiť ľubovoľný objekt NSDictionary s slovníkom Swift, pretože všetky objekty Objective-C sú AnyObject kompatibilné.