![](/img/trans.png)
[英]Passing Values to UIViewController in new Storyboard - Swift
[英]Use Swift nested class as UIViewController in storyboard
你們知道在Storyboard中是否可以使用Swift嵌套類作為UIViewController嗎?
我正在研究構建項目的不同方法,其中一種是通過將相關類嵌套在同一主類中來對它們進行分組。
讓我用一個例子來解釋:
假設我有一個屏幕來顯示我的應用程序設置,這需要一個UIViewController和一個模型。
我可以創建2個類: SettingsController
和SettingsModel
,但是我想知道是否通過將主類Settings
包含嵌套類Controller
和Model
這樣的主類來進行結構化不是很好嗎?
class Settings {
class Controller: UIViewController {
...
}
class Model {
...
}
}
這樣,我可以通過執行Settings.Controller
和Settings.Model
來使用它們,我認為它們看起來非常不錯。
現在,在使用情節提要時,效果很好。 在情節提要中,當我選擇一個視圖控制器來設置自定義類時,如果鍵入Setting.Controller
並按Enter,則該字段將無效並被清除。
所以我的問題是,你們是否知道我在做錯什么,或者根本不可能嗎?
當然,在發布問題后,我找到了解決方案,因此我將其分享給后代。
因此,我嘗試執行此操作時遇到了一個問題:
Settings.Controller
但是Interface Builder不會將其視為有效的類名。 解決方案很簡單,為控制器指定自己的Objc名稱:
class Settings {
@objc(SettingsController)
class Controller: UIViewController {
}
...
}
通過這樣做,您可以為嵌套控制器指定一個ObjC名稱,從而將其公開給Interface Builder。 現在,您可以通過填寫SettingsController
來引用控制器。
我認為故事板不支持(但),因此與此同時,您需要使用一些解決方法。
如果只需要語法Settings.Controller
,則可以執行以下操作:(受此答案啟發)
聲明您的Settings.Controller
類不是一個嵌套類,而是一個獨立的類SettingsController
:
class SettingsController : UIViewController { ... }
然后在Settings
中添加typealias
:
class Settings {
typelias Controller = SettingsController
class Model { ... }
}
現在你可以使用SettingsController
在故事板,但Settings.Controller
代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.