Ağırlıklı olarak Objective-C olan ancak Swift'e dönüştürme işleminde olan mevcut büyük bir kod tabanı üzerinde çalışıyorum.Swift/ObjC dairesel ithalat
Swift'de yeni sınıflar uygulanıyor, ancak bu sınıfların bir kısmının mevcut ObjC kodundan erişilmesi gerekiyor. Hem ObjC hem de Swift en iyi uygulamalarını takip etme girişiminde, yeni sınıfların bir öneki yoktur, ancak ObjC için bir önek ile tanımlanmıştır.
/**
Create contrived class that is named XXClassA in ObjC and ClassA in Swift.
*/
@objc(XXClassA) class ClassA: NSObject {
let foo = "bar"
}
Şimdiye kadar bu harika çalışıyor; Hızlı kod, ClassA()
kullanır ve ObjC, [[XXClassA alloc] init]
kullanır. XXClassA'ya başvuran tüm ObjC kodları kaldırıldıktan sonra, Swift sınıfından @objc(XXClassA)
da kaldırılabilir.
Bir ObjC sınıf başvurusu XXClassA'nız varsa ve daha sonra Swift kodu ClassA'nın içinde bu yeni sınıfı kullanmaya çalışırsa, bu durum bozulur.
BenXXClassC
adında bir objc sınıfını oluşturmak Say ve kullanarak kendisini başlatır
//
// XXClassC.h
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class XXClassA;
@interface XXClassC : NSObject
-(instancetype)initWithA:(XXClassA *)classA;
@end
NS_ASSUME_NONNULL_END
dairesel referans yerinde artık (gerçekten Swift sınıf ClassA
olan) bir XXClassA
. XXClassC'yi ClassA'nın içinden kullanmaya çalışırsam, başlatıcı kullanılamaz. Bunun yerine bu şekilde Classa yeniden tanımlamak durumunda
, bütün tekrar iyi olduğunu. Bu neden oluyor
class XXClassA: NSObject {
let foo = "bar"
}
anlıyorum ve ben yerde var düzeltme, ancak önceden sabitlenmiş objc sınıfların bu kalıbı kullanmaya devam etmek istiyorum. Dairesel ithalatı nasıl önleyeceğimize dair herhangi bir fikir, ancak adlandırma kuralı da devam ediyor mu? Burada
Tam kod örneği: https://gist.github.com/justAnotherDev/78483f9d94e40fd90c38