2015-10-22 28 views
0

我越來越想創建一個自定義類的iOS我斯威夫特應用程序時出現錯誤:不正確的斯威夫特2類方法initialize語法

Super.init從初始返回

前打來電話,

永遠不會被執行

這裏是我的代碼:

class CardTableViewCell: UITableViewCell { 

    //Vars 
    @IBOutlet weak var nameLabel: UILabel! 
    @IBOutlet weak var subtitleLabel: UILabel! 
    @IBOutlet weak var thumbImage: UIImageView! 
    @IBOutlet weak var detailsLabel: UILabel! 
    @IBOutlet weak var costLabel: UILabel! 

    init(name: String){ 
     self.nameLabel.text = name 
    } //<-- Error here 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
     super.init(coder:aDecoder) //<--- Error Here 
    } 

} 

我在做什麼錯在這裏?我從來不需要將init Coder方法添加到自定義類中。

我已經部分修復了代碼,請參閱下文。

更新的代碼: 類CardTableViewCell:的UITableViewCell {

//Vars 
    @IBOutlet weak var nameLabel: UILabel! 
    @IBOutlet weak var subtitleLabel: UILabel! 
    @IBOutlet weak var thumbImage: UIImageView! 
    @IBOutlet weak var detailsLabel: UILabel! 
    @IBOutlet weak var costLabel: UILabel! 

    init(name: String, subtitle: String) { 
     super.init(style: UITableViewCellStyle.Default, reuseIdentifier: name) 
     self.nameLabel.text = name 
     self.subtitleLabel.text = subtitle 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

var lers = CardTableViewCell(name: "Happy", subtitle: "Gilmore") //<-- ERROR HERE 
print(lers.subtitleLabel.text) 

錯誤被返回:

執行被所中斷,原因EXC_BAD_INSTRUCTION (代碼= EXC_I386_INVOP,子碼=爲0x0)

我不明白init代碼的方式,內容或原因。如果有人能指出我在Swift 2上的一些適當的文檔,請給我看看。所有的蘋果開發文檔都是可怕的。

回答

1

更改爲:

init(name: String) { 
    super.init(style: UITableViewCellStyle.Default, reuseIdentifier: name) 
    self.nameLabel.text = name 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 
+0

這個工作,但你能解釋這是怎麼回事?什麼是reuseIdentifier爲?我會不得不稱呼它對於類中的每個變量?例如,如何調用?:init(name:String,subtitle:字符串){ super.init(風格:UITableViewCellStyle.Default,reuseIdentifier:名稱) self.nameLabel.text =名稱 self.subtitleLabel.text =字幕 } – wUmpage

+0

你把它作爲CardTableViewCell(名稱:yournameindentifier)給init。或者,您可以根據需要將reuseIdentifier更改爲一個常量字符串。如果它幫助你,請接受這個答案。 – JDG

+0

那麼,reuseIdentifier可以是一個完全沒用的價值?它只需要初始化對象?我不確定我明白。 – wUmpage

0

嘗試改變這種

init(name: String){ 
     self.nameLabel.text = name 
    } //<-- Error here 

要這樣:

init(name: String){ 
     self.nameLabel.text = name 
     super.init(name: name) 

    } //<-- Error here 
+0

錯誤「Can not invoke'UITableViewCell.init'with type''(name:String)' – wUmpage

0

這不是直接回答你的問題,但請記住,因爲你的子類是UITableViewCell可能將通過dequeueReusableCellWithIdentifier(_:)間接獲得細胞,而不是直接構建細胞。

所以不是比在name屬性傳遞作爲自定義初始化,你可能只是想轉讓本作爲細胞生命週期的一部分(例如tableView(_:cellForRowAtIndexPath:)tableView(_:willDisplayCell:forRowAtIndexPath:)