Karma bir çerçeve üzerinde çalışma. Obj-C dosyası içine içe aktarılır, ancak iç sınıflar görünür değildir, yalnızca halka açık olanlar.Aynı çerçevede Objective-C'deki dahili Swift sınıfına nasıl erişilir?
belgeler açıkça iç clasees Swift ve Obj-C arasında mevcut olmalıdır devletler: aynı çerçeve hedefte Swift dosyaları kümesi aktarmak için Objective-C
içine Swift İthalat
senin Objective-C kodu, , çerçeve için şemsiye başlığına herhangi bir şey almanız gerekmiyor. Bunun yerine, Swift kodunuzu kullanmak istediğiniz herhangi bir Objective-C .m dosyasına, Swift kodunuzun için Xcode tarafından oluşturulan başlık dosyasını içe aktarın. Çerçeve hedefi için oluşturulan üstbilgi, çerçevesinin genel arabiriminin bir parçası olduğu için, yalnızca genel değiştiricisiyle işaretlenen bildirimler, bir çerçeve hedefi için oluşturulan üstbilgide görünür. Sen hala Swift yöntemleri ve çerçevenin Objective-C parçası içinden dahili düzenleyici ile işaretlenmiştir özelliklerini kullanabilirsiniz, yeter ki bir Objective-C sınıfından devralan bir sınıf içinde bildirilir . Erişim düzeyi değiştiricileri hakkında daha fazla bilgi için, The Swift Programming Language (Swift 2) numaralı telefondan Access Control'a bakın. dokümanlarında belirtildiği gibi
Kod Numuneinternal
değiştirici ile işaretlenmiş beyanlar oluşturulan görünmez,
// SwiftObject.swift
public class SwiftObject: NSObject {
public class func doSomething() {}
}
internal class YetAnotherSwiftObject: NSObject {
internal class func doSomething() {}
}
// SomeObject.m file
@implementation SomeObject
- (void)someMethod {
[SwiftObject doSomething];
}
- (void)someOtherMethod {
[YetAnotherSwiftObject doSomething]; // Use of undeclared identifier
}
@end
Güzel! Bu makroyu bilmiyordum ve google fazla bir şey göstermiyor. Apple dokümanlarından herhangi bir referansınız var mı? – Yariv
Güzel mi? Bu korkunç bir şekilde berbat ve dağınıktır. Yapman gereken bu gerçekten mi? Aynı problemle karşılaştım ve hatta elma bundan daha iyi bir şey yapmayı başarmış olmalıydı. Bundan vazgeçip nesnel c'ye geri döneceğim, bu mantıksız! Gerçekte çalışan bir şey yayınlamak için +1 (arama saatlerinden sonra). –
Apple belgelerine göre "Artık bir Objective-C sınıfından miras alınan bir sınıf içinde bildirildikleri sürece, iç düzenleyici ile işaretlenmiş Swift yöntemlerini ve özelliklerini çerçevenizin Objective-C bölümünden kullanabilirsiniz", eğer hızlı sınıf başka bir obj sınıfından türerse, bu, nesne kodunda mevcut olmalıdır. Benzer bir sorunum var ve hızlı sınıfımı @objc ile işaretledim ve NSObject öğesinden devralmaya devam ediyor, ancak yine de nesne kodunda bulunmuyor. – puru020