当前位置: 首页 > 面试题库 >

添加“ for in”支持以遍历Swift定制类

吴宏扬
2023-03-14
问题内容

众所周知,我们可以使用for..in循环遍历ArraysDictionaries。但是,我想这样迭代自己CustomClass

for i in CustomClass {
    someFunction(i)
}

CustomClass为了使之成为可能,必须支持哪些操作/协议?


问题答案:

假设您有一个类“ Cars”,希望使用for..in循环进行迭代

let cars = Cars()

for car in cars {
    println(car.name)
}

最简单的方法是将AnyGenerator与以下类一起使用:

class Car {
    var name : String
    init(name : String) {
        self.name = name
    }
}

class Cars : SequenceType {

    var carList : [Car] = []

    func generate() -> AnyGenerator<Car> {
        // keep the index of the next car in the iteration
        var nextIndex = carList.count-1

        // Construct a AnyGenerator<Car> instance, passing a closure that returns the next car in the iteration
        return anyGenerator {
            if (nextIndex < 0) {
                return nil
            }
            return self.carList[nextIndex--]
        }
    }
}

要尝试一个完整的工作示例,请添加上面的两个类,然后尝试像这样使用它们,并添加几个测试项:

    let cars = Cars()

    cars.carList.append(Car(name: "Honda"))
    cars.carList.append(Car(name: "Toyota"))

    for car in cars {
        println(car.name)
    }

就是这样,很简单。

更多信息:http://lillylabs.no/2014/09/30/make-iterable-swift-collection-
type-sequencetype



 类似资料:
  • 本文向大家介绍Swift遍历,包括了Swift遍历的使用技巧和注意事项,需要的朋友参考一下 例子            

  • WebSocket 使用一种被称作“Upgrade handshake(升级握手)”的机制将标准的 HTTP 或HTTPS 协议转为 WebSocket。因此,使用 WebSocket 的应用程序将始终以 HTTP/S 开始,然后进行升级。这种升级发生在什么时候取决于具体的应用;可以在应用启动的时候,或者当一个特定的 URL 被请求的时候。 在我们的应用中,仅当 URL 请求以“/ws”结束时,我

  • 问题内容: 我正在尝试在Swift操场上编写一段非常简单的代码。 但是,我总是在第3行出现错误。 “字符串”没有名为“生成器”的成员 有什么想法为什么不起作用?注意:我正在使用Swift 2.0(字符串和字符)在Xcode 7中工作。 问题答案: 从Swift 2开始,不符合。但是,您可以在使用属性。返回符合的,因此可以通过循环进行迭代: 另外,您可以添加扩展名使其符合: 虽然,我确定Apple有

  • 问题内容: 我从网址获取此json,返回的JSON为: 我想在IOS的TableView中显示名称。 我的Swift2代码是: 如何遍历JSON数组以在表视图的单元格中放置哪个名称? 问题答案: 该变量是一个字典数组,因此您可以使用 在 Swift 3中 ,未指定的JSON类型已更改为

  • 问题内容: 我对Xcode在《 Swift编程语言指南》中给我进行此实验的答案感到有些困惑: 我知道随着字典的使用,最大的数字被设置为变量。但是,我对为什么Xcode会说要根据每次测试设置5次,1次或3次感到困惑。 查看代码时,我发现应该单独在“ Prime”中将其设置6次(2、3、5、7、11、13)。然后,它应该跳过“斐波那契”中的任何数字,因为这些数字都小于最大数字,该数字当前已从“ Pri