2016-07-11 172 views
2

這是我的協議:類不符合協議

protocol LiveTableViewCellProtocol: class { 
    var data: LiveCellObjectProtocol! { get set } 
} 

這是我的類:

class RepliesTableViewCell: UITableViewCell, LiveTableViewCellProtocol { 
     var data: RepliesCellObject! //ERROR! does not conform to protocol. 
} 

RepliesCellObject定義爲:

public class RepliesCellObject: NSObject , LiveCellObjectProtocol{ 
    //basic stuff here. 
} 

RepliesCellObject是LiveCellObjectProtocol。 ..爲什麼我的表格單元不符合?

+0

在我的RepliesTableViewCell中,我必須將我的'''data'定義爲'''RepliesCellObject'''。 – TIMEX

回答

3

它不會因爲符合LiveTableViewCellProtocol對象符合,您可以設置數據任何 LiveCellObjectProtocol ,包括一個不是NSObject的。在RepliesTableViewCell中,你不能這樣做。數據必須設置爲也是NSObject的LiveCellObjectProtocol。

因此RepliesTableViewCell不符合LiveTableViewCellProtocol。

+0

關聯類型怎麼樣? – TIMEX

0

它必須特別是與協議所說的相同。你在做什麼是不允許的,因爲它不完全一樣。請記住,如果您確定它可以使用as!使其成爲RepleisCellObject。

0

associatedtype可以幫助這裏

protocol LiveTableViewCellProtocol: class { 
    associatedtype Data: LiveCellObjectProtocol 
    var data: Data! { get set } 
} 
0

你應該使用相關的類型

protocol LiveTableViewCellProtocol: class { 
     associatedtype Object : LiveCellObjectProtocol 

     var data: Object! { get set } 
    } 
相關問題