我试图使用enumerateObjectsUsingBlock迭代数组来获取数据.如何在Swift中使用enumerateObjectsUsingBlock?请帮我举个例子.
Lan*_*nce 55
enumerateObjectsUsingBlock:不是Array上的方法,而是NSArray上的方法.如果你想使用它,你需要一个NSArray而不是Array的实例.
import Foundation
var array: NSArray = ["Some", "strings", "in", "an", "array"]
array.enumerateObjectsUsingBlock({ object, index, stop in
//your code
})
Run Code Online (Sandbox Code Playgroud)
如果你有一个现有的数组,你可以将swift Array转换为NSArray使用as
var cocoaArray = swiftArray as NSArray
Run Code Online (Sandbox Code Playgroud)
或者,如果您只是import FoundationSwift编译器将自动将您的Swift数组桥接到NSArray,并且所有NSArray方法都可供您使用.
或者您可以使用Swift的enumerate功能:
for (index, value) in enumerate(array) {
// your code
}
Run Code Online (Sandbox Code Playgroud)
在Swift 2中,enumerate不再是一个自由函数,现在它在协议扩展中!
for (index, value) in array.enumerate() {
// your code
}
Run Code Online (Sandbox Code Playgroud)
在Swift 3中,enumerate被重命名为enumerated
for (index, value) in array.enumerated() {
// your code
}
Run Code Online (Sandbox Code Playgroud)
新的枚举函数返回带有索引器和值的元组,因此您可以获得与enumerateObjectsUsingBlock类似的功能.
func myBlock (index: Int, value: Int, inout stop: Bool) -> Void {
println("Index: \(index) Value: \(value)")
if index == 3 {
stop = true
}
}
var array = [1,2,3,4,5]
for (index, value) in enumerate(array) {
var stop = false;
myBlock(index, value, &stop)
if stop {
break;
}
}
//Output...
//Index: 0 Value: 1
//Index: 1 Value: 2
//Index: 2 Value: 3
//Index: 3 Value: 4
Run Code Online (Sandbox Code Playgroud)
我想他们没有公开enumerateObjectsUsingBlock,因为您可以使用上面的代码复制功能.
编辑:匿名函数崩溃我的操场,所以使用内联函数.还使用stop变量添加以用于说明目的.
| 归档时间: |
|
| 查看次数: |
19388 次 |
| 最近记录: |