【发布时间】:2014-08-04 16:42:38
【问题描述】:
我有一个名为 Controller 的类,它包含一个 Array 属性。现在,我的班级是这样声明的:
class Controller {
var myArray: [AnyObject]
init(bool: Bool) {
if bool == true {
myArray = [10, 11, 12]
} else {
myArray = ["Yo", "Ya", "Yi"]
}
}
}
我对这段代码的问题是 myArray 在我的类初始化之后(当然)仍然是 [AnyObject] 类型。因此,每次我需要从 myArray 中取出一个对象时,我都必须像这样转换它的类型(Int 或 String):
let controller = Controller(bool: false)
let str = controller.array[0] as String
我希望能够编写 let str = controller.array[0] //str: String 而不必在 myArray 中强制转换对象的真实类型。有没有办法这样做?我必须使用惰性初始化、结构、泛型类型吗?
这是一个伪代码的尝试:
class Controller {
var myArray: Array<T> //Error: use of undeclared type 'T'
init(bool: Bool) {
if bool == true {
myArray = [10, 11, 12] as [Int] //myArray: Array<Int>
} else {
myArray = ["Yo", "Ya", "Yi"] as [String] //myArray: Array<String>
}
}
}
【问题讨论】:
-
为什么您的数组需要在运行时包含变体类型?这是你可以设计的东西吗?这似乎很混乱,如果我跳入代码库,我会被这个抛出。
标签: arrays class swift initialization