[英]How to make a Swift package importable/usable in an objective-c project?
我有一個僅用 Swift 編寫的 package,現在我想讓它適用於 objective-c 項目。 I know usually to use Swift classes in the same target you can use the bridging header created for the module, but when I import my package through SPM, there is no prompt to create a bridging header. 這可能嗎? 我必須先以某些方式准備我的 swift package 嗎?
令人驚訝的是,網上關於此的文檔數量很少,但我終於弄明白了。 這不像在 package.Swift 文件中進行一些更改並單擊一些按鈕那么容易,但幸運的是它也不是太難。 我仍在努力使我的 Swift 庫可在 Objc 中使用,並將根據我在此過程中發現的任何發現更新此答案,但這是我目前所擁有的:
public final class MyObjcLibrary: NSObject {}
@objc
關鍵字,並且您可以指定 objc 代碼使用的 class 名稱,並在關鍵字后面加上括號 - 當您的 objc ZA2F2ED4F8EBC40AB9CBB4C21A 只是一個包裝時,這非常方便您對應的 Swift class 的功能:@objc(MyLibrary)
public final class MyObjcLibrary: NSObject{}
這樣,您的庫的用戶可以編寫[MyLibrary alloc]
而不是[MyObjcLibrary alloc]
。
@objc
關鍵字)。 假設您有一個名為MyLibrary
的 Swift class :@objc(MyLibrary)
public final class MyObjcLibrary: NSObject{
private var myLibrary: MyLibrary
@objc public init() {
myLibrary = MyLibrary()
}
@objc public static func doSomething(withID: String) {
myLibrary.doSomething(withID)
}
@objc public static func doSomethingElse(ID: String) {
myLibrary.doSomethingElse(ID)
}
...
}
@import MyPackage
...
[[MyLibrary alloc] init];
[MyLibrary doSomethingWithID:@"my_id"];
[MyLibrary doSomethingElseWithID:@"my_id"];
...
注意函數是如何在 objc 中命名的——如果第一個參數不以前綴“with”開頭,它會自動添加到 objc function 簽名中,例如doSomethingElseWithID
。
我見過的問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.