Swift'te bir kütüphane yazdım ve Objective-C ile yazılmış mevcut projeme aktaramadım.
İçe aktarmanın herhangi bir yolu var mı?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
Swift'te bir kütüphane yazdım ve Objective-C ile yazılmış mevcut projeme aktaramadım.
İçe aktarmanın herhangi bir yolu var mı?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
Yanıtlar:
İçe aktarmanız gerekiyor TargetName-Swift.h
. Hedef ad olduğunu unutmayın - diğer yanıtlar sınıf adını kullanma hatasını yapar.
Bu tek dosya, projenizdeki açıklamalı @objc
veya devralınan tüm Swift sınıfları için Objective-C arabirimlerini tanımlayan otomatik olarak oluşturulan bir üstbilgidir NSObject
.
hususlar:
Hedef adınız boşluk içeriyorsa, bunları alt çizgi ile değiştirin (ör. My Project
Olur My_Project-Swift.h
)
Hedefiniz bir çerçeveyse, içe aktarmanız gerekir <TargetName/TargetName-Swift.h>
Swift dosyanızın hedefin üyesi olduğundan emin olun
Apple web sitesinden talimatlar:
Swift kodunu aynı çerçeveden Objective-C'ye almak için
Derleme Ayarları altında , Paketleme'de , bu çerçeve hedefi için Modül Tanımla ayarının Evet olarak ayarlandığından emin olun . Bu sözdizimini kullanarak ve uygun adları değiştirerek Swift kodunu bu çerçeve hedefinden bu çerçeve hedefi içindeki herhangi bir Objective-C .m dosyasına alın:
#import "ProductName-Swift.h"
Revizyon:
"ProductName-Swift.h" dosyasını yalnızca .m dosyalarına alabilirsiniz.
Hedefinizdeki Swift dosyaları, bu içe aktarma ifadesini içeren Objective-C .m dosyalarında görünür olacaktır.
Döngüsel referansları önlemek için Swift'i bir Objective-C başlık dosyasına aktarmayın. Bunun yerine, bir Swift sınıfını bir Objective-C başlığında kullanacağını bildirebilirsiniz. Bir Swift sınıfını Objective-C'de alt sınıflandıramayacağınızı unutmayın.
NSObject
!!! hemen bir class Blah
an beyan edip çalışmasını sağlayamazsınız . olması gerekiyorclass Blah : NSObject
İşte yapmanız gerekenler:
Objective-C ile yeni bir proje oluşturun
Yeni bir .swift
dosya
oluştur
Xcode Project dosyanızı tıklayın
Yapı Ayarları'nı tıklayın
Arama çubuğunu bulun ve Defines Module'ü arayın .
Değeri Evet olarak değiştirin .
Ürün Modülü Adını Ara .
Değeri projenizin adıyla değiştirin.
Uygulama temsilcisine aşağıdakileri ekleyin: #import "YourProjectName-Swift.h"
Not: Swift dosyanızı her kullanmak istediğinizde aşağıdaki satırı içe aktarmanız gerekir:
#import "YourProjectName-Swift.h"
Defines module
içinde Build settings
hiç Yes
işleri benim için sabit ne!
YourProjectName
in #import "YourProjectName-Swift.h"
proje adı özel karakterler içeriyorsa Faydalı adım 8 den projenin adı olacaktır ve emin biçimlendirmeniz gerektiğini tam olarak nasıl değildir.
Proje dosyanızda ayarları derleyin ve "Objective-C Oluşturulmuş Arabirim Üstbilgi Adı" nı arayın . Bu özelliğin değeri, eklemeniz gereken addır.
"Ürün Modülü Adı" özelliğiniz (yukarıdaki özelliğin varsayılan olarak bağımlı olduğu özellik), test / hata ayıklama / bırakma / vb. özel bir ad ayarlayarak varyasyon.
Swift
Dosyayı içeri aktarmak Objective-c
, import
düzgün bir şekilde yapılmazsa bu hataya neden olabilir .
NOT: Swift dosyalarını harici olarak içe aktarmak zorunda değilsiniz, hızlı dosyalarla ilgilenen bir dosyayı içe aktarmanız yeterlidir.
Eğer düzenlendi / Kopyalanan Swift dosya içindeki Objective-C projesi . Otomatik olarak bir köprüleme başlığı oluşturacaktı.
Kontrol Objective-C Generated Interface Header Name
de Targets -> Build Settings
.
Yukarıdakilere dayanarak, olduğu gibi ithal edeceğim KJExpandable-Swift.h
.
Sizin en olacak TargetName-Swift.h
durumlarda, TargetName
proje adı veya başka bir hedefe dayalı farklılık senin ekleyip bunun üzerinde çalışan olabilir.
Hedefimin altında olduğu gibi KJExpandable
,KJExpandable-Swift.h
İlk adım:-
Proje Hedefi -> Derleme Ayarı -> Ara ('Tanımla') -> Modül güncelleme değerini tanımla Hayır seçeneğini Evet olarak seçin
"Modülü Tanımlar": EVET .
"Her Zaman Swift Standart Kitaplıklarını Göm": EVET .
"Objective-C Uyumluluk Üstbilgisini Yükle": EVET .
İkinci adım:-
Aşağıdaki gibi Objective C ".h" Dosya Swift dosya Sınıfı ekleyin
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
'ProjectName (Project Name) -Swift.h' dosyasını Objective C ".m" dosyasına aktar
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
Swift kodunu aynı çerçevede Objective-C dosyalarınıza aktarıyorsanız bir uyarı var . Çerçeve adını ve açılı ayraçları belirterek yapmanız gerekir:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
"Ürün Modülü Adı" oluşturma ayarı ( PRODUCT_NAME = MyFramework
).
Basitçe eklemek #import "MyFramework-Swift.h"
işe yaramaz. Yerleşik ürünler dizinini kontrol ederseniz (böyle bir #import
ek eklenmeden önce, hedefte bazı Swift kodları olan en az bir başarılı derleme elde etmiş olursanız), dosyayı MyFramework-Swift.h
yine de Headers
dizinde görmelisiniz .
Swift 4'te oluşturulan ve daha sonra Objective-C dosyaları eklediyseniz, bunu şu şekilde yapın:
@objcMembers
public class MyModel: NSObject {
var someFlag = false
func doSomething() {
print("doing something")
}
}
Referans: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
Aynı projede Swift ve Objective C ile ilgili yayın öncesi notlara göz atın
İçe aktarıyor olmalısınız
#import "SCLAlertView-Swift.h"
The name of this header is your product module name followed by adding "-Swift.h".
Bu, yazdığınız gibi sınıf adı değil, ürün modülünüzün adı ve sadece belirli bir dosyayı değil, tüm hızlı dosyaları içe aktarmayı önemsiyor
Oluşturmaya çalıştığınız hedefin Yapı Ayarlarında "Hedef-C Oluşturulmuş Arayüz Üstbilgi Adı" nı arayın (diyelim MyApp-Swift.h
) ve #import "MyApp-Swift.h"
erişmeye çalıştığınız kaynak dosyaya bu ayarın ( ) değerini içe aktarın Swift API'larınız.
Bu alan için varsayılan değer şudur $(SWIFT_MODULE_NAME)-Swift.h
. "Objective-C Oluşturulmuş Arabirim Üstbilgi Adı" ayarının değer alanını çift tıklarsanız görebilirsiniz.
Ayrıca, modül adınızda tire varsa (diyelim ki My-App
), $(SWIFT_MODULE_NAME)
tüm tirelarda alt çizgilerle değiştirilir. O zaman eklemeniz gerekecek #import "My_App-Swift.h"
.
Swift dosyasını Objective-C sınıfında kullanmak istiyorsanız , Xcode 8'den itibaren aşağıdaki adımları takip edebilirsiniz:
Projeyi Objective-C'de oluşturduysanız:
Derleyin ve aşağıdaki gibi linker hatası üretecekse: x86_64 veya armv 7 mimarisi için Swift dilinin (3.0) önceki dosyalardan (2.0) daha yeni sürümüyle derlendi
Cihazınızda bir değişiklik daha yapın
Oluşturun ve çalıştırın.
Kısa çizgilere ve alt çizgilere dikkat edin, bunlar karıştırılabilir ve Proje Adınız ve Hedef adınız SWIFT_MODULE_NAME ile aynı olmayacak.
#import <TargetName-Swift.h>
#import <klavyesinden girdiğinizde göreceksiniz ve otomatik olarak Xcode size tavsiyede bulunacaktır.
Projenin içindeki .PCH dosyasını bulun. ve sonra ekle #import "YourProjectName-Swift.h"
Bu sınıf üstbilgilerini alır. Böylece belirli bir dosyaya aktarmanız gerekmez.
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "YourProjectName-Swift.h"
#endif