2016-03-18 74 views
2

我一直在使用NSCoding碰到一個障礙。具體來說,實例化一個符合NSCoding的類。也許我錯過了一些非常明顯的東西,但我還沒有找到任何答案。Swift,麻煩實例化NSCoding兼容類

```迅速

class TitleTextField: UITextField, UITextFieldDelegate { 



required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder)! 

    font = UIFont(name: "Helvetica-Neue", size: 25) 

} 

```

這只是一個例子,一個簡單的。當我試圖在其他地方實例化這個類時,例如像「let textField = TitleTextField()」(抱歉無法弄清楚如何格式化)我得到錯誤「在調用中缺少參數'編碼器'的參數」。當我嘗試用建議的TitleTextField(coder:NSCoder)修復它時,它會拋出一個錯誤並告訴我刪除「coder:」,然後它會拋出另一個錯誤並說「無法轉換類型值(NSCoder).Type'(又名'NSCoder.Type')到期望的參數類型'NSCoder'「

如何實例化這個類?

這給了我在我創建了一個自定義的類,它符合NSCoding以下幾個不同的例子,一個T.

回答

2

這是非常簡單的後還有麻煩 - 你需要添加另一個指定的初始化,通常init(frame:)UIView。您實際上可以在其中撥打super.init(...)

問題是,一旦添加了一個初始化程序,其他初始化程序就不再從超類繼承,而必須定義它們。

+0

我不明白的UIView有它 –

+0

做@ R.P.Carson'UITextField'是'UIView'的子類和初始化來自'UIView'。 – Sulthan

1
required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

    font = UIFont(name: "Helvetica-Neue", size: 25) 
} 

此代碼適用於我。看來你錯過了FUNC聲明可選

public class UIView : UIResponder { 
    public init?(coder aDecoder: NSCoder) 
} 
+0

我不明白UIView與它有什麼關係。而代碼編譯,我只是不能做一個TitleTextField的實例 –

+0

它只是從UIView接口的代碼複製粘貼,以顯示'所需的init'實現。 –