2017-03-02 90 views
0

我在Swift 3中創建了一個自定義框架,包含擴展(用於String,UIColors等)以及UITableView和UIView的子類。爲什麼子類不能在框架中工作,但擴展在Swift中呢?

問題是,當我嘗試在另一個項目中使用我的子類時,它不起作用並崩潰。和擴展的功能完美地工作... 子類不會出現在故事​​板中的「可用類」列表中。 (我的課不在自定義類的列表中,而模塊部分是空的)

在我的框架中,我的子類是公共的。我也嘗試過開放,而且我遇到了同樣的問題。

希望這是不夠明確的,任何人都可以幫我:)

編輯: 要重現該問題:

  • 創建自定義類,從UIView的繼承這樣的:

    public class CustomView: UIView { 
        public var name: String = "MyName" 
        public func sayMyName() { print("\(self.name)") } 
    } 
    
  • 創建您的框架

  • 創建一個新項目並導入您的框架。

  • 嘗試在故事板中實例化CustomView。

+1

你不能看到一個類的框架,除非你'在斯威夫特文件import'它,這就是爲什麼你的故事板無法看到它們 – Gobe

+0

所以我不能用一個子類,只有一個'。框架「,並需要我的'.framework'和我的'CustomView.swift'? 這很奇怪,爲什麼我可以在Objective-c的'.a'中使用子類,而不是使用'.framework'在Swift中使用子類? –

回答

0

首先,您需要確保您的Framework目標可以被您的App項目訪問。兩個選項:

  • 將Framework .xcodeproj文件添加到項目中,以允許編輯任意目標。請注意,一次只有一個Xcode項目可以使用它。
  • 將Framework.framework文件添加到項目中,然後確保它包含在應用程序的鏈接框架和庫中。

現在,您已經將其添加到您的Xcode的應用項目,你需要做的是:

  • 如果您要訪問您的open類的代碼,使用語法:

    import [framework] 
    
  • 如果您希望訪問故事板中的UIKit子類,請添加其超類控件,然後轉到Identity Inspector並(1)選擇框架Module,將子類選擇爲Class

+0

我做了所有的事情。但是在Storyboard中,'Module'部分沒有我的框架,我的班級也沒有在'Class'部分 –

+0

中嘗試更改班級的*輔助功能*嗎?嘗試將'public'改爲'open'?此外,您的子類IBDesignable(如果需要,還有IBInspectable)? – dfd

+0

是的,但同樣的問題,同樣的問題... 解決繞過與擴展和協議的子類的問題..不是很漂亮,但它的作品哈哈 –

相關問題