В Swift вы не можете «подстроить» подпись блока / закрытия, как в Objective-C, вы должны явно указать. Либо с дополнительным приложением:
array.enumerateObjectsUsingBlock({ object, index, stop in
if let str = object as? String {
println(str)
}
})
, либо с принудительным нажатием, если вы уверены, что все объекты являются строками:
array.enumerateObjectsUsingBlock({ object, index, stop in
let str = object as String // `as!` in Swift 1.2
println(str)
})
Поскольку NSArray
соединяется с Array
плавно, вы можете альтернативно использовать перечисление Array
:
for str in array as [String] {
println(str)
}
или, если вам нужны элементы вместе со своим индексом:
for (index, str) in enumerate(array as [String]) {
println("\(index): \(str)")
}
Обновление для Swift 3.0
С enumerateObjects(using:)
:
array.enumerateObjects(using: { (object, index, stop) in
if let str = object as? String {
print("\(index): \(str)")
}
})
Перечислить как массив Swift:
if let a = array as? [String] {
for str in a {
print(str)
}
}
Перечислить элементы и индексы в виде массива Swift:
if let a = array as? [String] {
for (index, str) in a.enumerated() {
print("\(index): \(str)")
}
}