簡體   English   中英

存儲自定義對象(Swift 中的類)以供 Objective-C 方法訪問

[英]Store a custom object (class in Swift) for access by an Objective-C method

我在 Swift 中創建了一個類(我正在學習),用於保存某些值,如下所示:

@objc public class Book: NSObject {
    var title: String = ""
    var date: Date = Date()
    var sku: Float = 0
}

我現在想將這個類存儲在一個可以被我的 Objective-C 類訪問的屬性中。

我嘗試在視圖控制器中創建一個變量,其中使用該類,如下所示:

var lastBookViewed = Book()

但是,當我嘗試使用以下代碼將對象保存到屬性時,出現錯誤:

//create instance of book
let myBook = Book()
//gather information about book
lastBookViewed = myBook //THROWS COMPILER ERROR 'Use of Unresolved Identifier lastBookViewed

有沒有辦法做到這一點?

如果更簡單,將對象存儲到 Objective-C 文件中的屬性也可以工作,但到目前為止我還沒有能夠讓 Objective-C 文件識別在 Swift 中創建的 Book 類,盡管我將 @objc 放在它之前受到推崇的。

編輯

當我嘗試使用以下語法在同一個 Swift 文件中的不同 Swift 類(視圖控制器類)中創建用於存儲自定義 swift 對象的屬性或變量時:

var lastBookViewed: Book

編譯器為 VC 類發出警告“yourVC has no initializers”

轉到項目的常規設置。 為您的應用選擇合適的目標。 轉到“Build Settings”並切換到“All”,而不是默認的“Basic”。 在這里搜索“包裝”部分。 打開“定義模塊”,將“否”更改為“是”。

屏幕 1

當它打開時,我們現在將能夠在objective-c 文件中使用swift 類。

  1. 在離開“構建設置”之前,在“包裝”部分中查找“產品模塊名稱”。 這很重要,因此請務必記下並准確復制“產品模塊名稱”。

  2. 接下來轉到一個 Objective-c 類,您希望能夠在其中訪問您的 swift 類。 在該類的實現或 .m 文件中,導入這樣的標頭:

#import "MyProjectModuleName-Swift.h"

這里導入的文件名必須是構建設置中的確切項目模塊名稱。 您想要訪問 swift 類的任何 Objective-c 文件都應包含此導入。

  1. 現在值得一提的是使用 swift 類時可能出現的一個潛在問題。 Objective-c 無法讀取頂級 swift 類。 因此,如果您直接使用 swift 類中的方法或變量,它將無法識別。 這個問題有一個簡單的解決方案。 這是為了讓你的班級public
 @objc public class myClass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM