我試圖使用泛型逃脫大量的鑄造。我會提供一個簡單的例子:通用類作爲參數
import UIKit
class List<T> {
let items: [T]
init(items: [T]) {
self.items = items
}
}
class ListsViewController: UIViewController {
var lists: [List<AnyObject>] = []
}
let viewController = ListsViewController()
let lists = [List(items: ["Fruits"])]
viewController.lists = lists
^error "String" is not identical to "AnyObject"
我讀過,我可以做
class ListsViewController<T>: UIViewController
,但比我會進一步出現問題倒在那裏我有救ListsViewController情況中,鏈...所以這並沒有幫助。
什麼爲什麼的例子使用默認斯威夫特陣列工作,我不明白這裏:
import UIKit
class ListsViewController: UIViewController {
var lists: [AnyObject] = []
}
let viewController = ListsViewController()
let lists = ["Fruits", "Meat"]
viewController.lists = lists
沒有錯誤雖然列出的類型爲[字符串]不是[AnyObject。我可以爲我的泛型類獲得相同的行爲嗎?
非常感謝您的幫助!
這裏有一篇關於逆變和協變的文章,可能會有所幫助。 http://nomothetis.svbtle.com/type-variance-in-swift許多語言允許數組是協變的(儘管它不是類型安全的並且需要運行時檢查)。然而,這種「寬大」並不總是適用於你發現的所有課程。 C#有同樣的問題(直到它添加了一種安全的方式來實現協方差) – 2015-02-05 15:05:28
這裏是我發佈的鏈接中的一個簡短的相關段落「所有這些說,我們可以開發者聲明類型是協變,逆變還是不變嗎?不是我能看到的,到目前爲止,默認情況是內置的差異規則起作用(數組和字典協變,函數是......不管它們是什麼等),但是自定義類型都是不變的。「 – 2015-02-05 15:07:58
我看,太糟糕了:( 感謝您整理出來! – warly 2015-02-05 15:18:20