如果你像這樣定義如何在Objective-C中創建Swift對象?
@objc class Cat {
}
在迅速迅速類,你可以做
var c = Cat()
但是你如何使用Objective-C一個Cat
實例?
子類NSObject
作品,因爲你就可以「黃金-初始化」,但是我們可以做到這一點沒有繼承的Objective-C類?
如果你像這樣定義如何在Objective-C中創建Swift對象?
@objc class Cat {
}
在迅速迅速類,你可以做
var c = Cat()
但是你如何使用Objective-C一個Cat
實例?
子類NSObject
作品,因爲你就可以「黃金-初始化」,但是我們可以做到這一點沒有繼承的Objective-C類?
最直接的方法是從NSObject
子類Cat
。如果你不能這樣做,你將需要做一個類方法或返回Cat
的函數。
@objc class Cat {
class func create() -> Cat {
return Cat()
}
}
func CreateCat() -> Cat {
return Cat()
}
Cat *cat = [Cat create];
Cat *cat = CreateCat();
在現代的Objective-C,你可以調用的功能,如他們的屬性:
斯威夫特:
class func create() -> Cat {
return Cat()
}
的OBJ-C:
Cat *cat = Cat.create;
由於編譯器的實現方式,可以用這種方法調用類方法,但這樣做通常是不好的形式。點符號明確用於訪問ObjC中的屬性。請參閱「點語法是Accessor方法調用的簡潔替代方法」https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210 -CH5-SW5「點語法純粹是存取方法調用的一個方便包裝。」 –
可以在聲明+alloc
虛擬類別(不需要實現它):
@interface Cat (Alloc)
+ (instancetype)alloc;
@end
,然後你可以用它定期的alloc-INIT:
Cat *cat = [[Cat alloc] init];
都無需改變SWIFT CODE。
也許[this](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_77)文章會幫助你 – user2340612