2017-03-08 96 views
1

超屬性類型在一個名爲TableViewCell我有一個屬性更改上迅速

class TableViewCell { 
    var model: AnyObject? 
} 

在一類稱爲超類CountryTableViewCell我寫了這個代碼

class CountryTableViewCell : TableViewCell { 

    var model:[AnyObject]? { 

     didSet { 
      // do some stuff 
     } 
    } 
} 

,我得到這個錯誤

屬性模型[AnyObject]?無法覆蓋類型爲 的任何屬性Anyobject?

是沒可能的財產模型更改到一個數組?

+0

嘗試用VAR模型前覆蓋:[AnyObject] – Kingalione

+0

不行,同樣的錯誤 –

回答

2

不,你不能用這樣的。

class TableViewCell { 
    var model: Any? 
} 

class CountryTableViewCell : TableViewCell { 

    override var model: Any? { 
     didSet { 
     } 
    } 
} 

現在,如果你想在didSet模型的數組,那麼你可以鍵入它轉換:也AnyObjectAny如果使用斯威夫特3.

您可以更改如下代碼來代替如下面的代碼。

class CountryTableViewCell : TableViewCell { 

     override var model: Any? { 
      didSet { 
       if let arrModel = model as? [Any] { 
        // Do Stuff... 
       } 
      } 
     } 
} 
+0

它的工作完美謝謝。但我使用的是Swift 3,我使用AnyObject而不是Any。這是一個問題嗎? –

+0

@從斯威夫特3 J.Doe起,你將需要使用任何代替AnyObject。 –

+0

你有什麼參考?在這裏,他們說這是不一樣的https://medium.com/@mimicatcodes/any-vs-anyobject-in-swift-3-b1a8d3a02e00#.11oyobtcw –

0

否該屬性的類型無法更改。如果這是允許的,它會通過違反類型安全:

let subcell: CountryTableViewCell = CountryTableViewCell() 
let supercell: TableViewCell = subcell 
supercell.model = "anything that is not an array" as NSString 
let wrong = subcell.model // not an array! 

@ParthAdroja's answer顯示運行時的辦法解決這個。您不會在編譯類型中獲得數組,但至少可以確保您在運行時擁有數組。

原則,如果財產是隻讀的這種專業化的子類應該工作(這是同爲限制函數的返回類型),但隨着斯威夫特的3.任何人都關心這個文件可以不工作向Swift團隊發送SE請求☺。

(。此外,蘋果do have some magic to make it work with bridged Objective-C classes,但我們不知道它是什麼還)