在Swift中通过NSMutableArray循环

时间:2015-02-08 13:06:34

标签: ios swift

如何在Swift中通过NSMutableArray?我尝试过:

var vehicles = NSMutableArray()

该数组包含类:Vehicle

中的对象
for vehicle in vehicles {
    println(vehicle.registration)
}

如果没有编译器告诉我registration不属于AnyObject,我就无法运行上面的代码。在这一点上,我认为这是因为我没有告诉for循环类item属于哪种类型。所以我修改了代码:

for vehicle: Vehicle in vehicles {
    println(vehicle.registration)
}

现在编译器抱怨转发...我如何在循环通过车辆阵列时简单地获得对自定义注册属性的访问权?

3 个答案:

答案 0 :(得分:27)

这应该有效:

for vehicle in (vehicles as NSArray as! [Vehicle]) {
    println(vehicle.registration) 
}

答案 1 :(得分:14)

正如Romain所说,你可以使用Swift数组。如果您继续使用NSMutableArray,则可以执行以下任一操作:

for object in vehicles {
    if let vehicle = object as? Vehicle {
        print(vehicle.registration)
    }
}

或者,你可以强制打开它,使用where限定符保护自己免受演员失败:

for vehicle in vehicles where vehicle is Vehicle {
    print((vehicle as! Vehicle).registration)
}

或者,您可以使用功能模式:

vehicles.compactMap { $0 as? Vehicle }
    .forEach { vehicle in
        print(vehicle.registration)
}

显然,如果可能,问题是您是否可以退出NSMutableArray并使用Array<Vehicle>(又名[Vehicle])。所以,而不是:

let vehicles = NSMutableArray()

你可以这样做:

var vehicles: [Vehicle] = []

然后,您可以执行以下操作:

for vehicle in vehicles {
    print(vehicle.registration)
}

有时候我们会遇到返回NSMutableArray个对象的Objective-C代码,但如果在{是NSMutableArray中创建了这个Array<Vehicle>,那么最好使用{{1}}代替。

答案 2 :(得分:3)

NSMutableArray来自Objective-C世界。现在您可以使用泛型和强类型数组,如下所示:

var vehicles = [Vehicle]()
...
for vehicle in vehicles {
    println(vehicle.registration)
}