2016-06-10 36 views
1

我嘗試使用協議來設置具有對UIView的引用的對象佈局。我的觀點類看起來像:如何使用協議從UIView設置對象佈局

protocol FirstViewLayout { 
    var label: String { get } 
    var text: String { get } 
} 

class FirstView: UIView { 

@IBOutlet weak var label: UILabel! // reference to object in storyboard 
@IBOutlet weak var button: UIButton! // reference to object in storyboard 

init(layout: FirstViewLayout){ 
     super.init(frame: UIScreen.mainScreen().bounds) 
     label.text = layout.text 
     button.setTitle(layout.text, forState: .Normal) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 
}//end class 

然後我創造,我創建簡單的結構,併爲對象的值從視圖

struct FirstViewStruct: FirstViewLayout { 

    var label: String { return "Test" } 
    var text: String { return "TEST" } 

} 

一個單獨的快捷文件之後,我去ViewControler和設置它在viewDidLoad()這樣的:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let layout = FirstView(layout: FirstViewStruct()) 
    self.view.addSubview(layout) 

} 
在這種情況下,我在這一刻recive錯誤 fatal error: unexpectedly found nil while unwrapping an Optional

label.text = layout.text 

我不知道爲什麼。有人可以幫我解決這個問題嗎?

+0

你可能需要佈局.text區段 – user2277872

回答

0

我認爲你不能在結構中有默認值。

創建填充值一個init:

convenience init() { 
    self.label = "test" 
    self.text = "test" 
    super.init() 
} 
+0

不工作:( – PiterPan