簡體   English   中英

在故事板上使用Swift嵌套類作為UIViewController

[英]Use Swift nested class as UIViewController in storyboard

你們知道在Storyboard中是否可以使用Swift嵌套類作為UIViewController嗎?

我正在研究構建項目的不同方法,其中一種是通過將相關類嵌套在同一主類中來對它們進行分組。

讓我用一個例子來解釋:

假設我有一個屏幕來顯示我的應用程序設置,這需要一個UIViewController和一個模型。
我可以創建2個類: SettingsControllerSettingsModel ,但是我想知道是否通過將主類Settings包含嵌套類ControllerModel這樣的主類來進行結構化不是很好嗎?

class Settings {
   class Controller: UIViewController {
      ...
   }
   class Model {
      ...
   }
}

這樣,我可以通過執行Settings.ControllerSettings.Model來使用它們,我認為它們看起來非常不錯。

現在,在使用情節提要時,效果很好。 在情節提要中,當我選擇一個視圖控制器來設置自定義類時,如果鍵入Setting.Controller並按Enter,則該字段將無效並被清除。

所以我的問題是,你們是否知道我在做錯什么,或者根本不可能嗎?

當然,在發布問題后,我找到了解決方案,因此我將其分享給后代。

因此,我嘗試執行此操作時遇到了一個問題:

  1. 嵌套類是通過使用點符號表示的: 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.

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