在Swift 3中替代数组的indexOf(_:)方法

9 浏览
0 Comments

在Swift 3中替代数组的indexOf(_:)方法

在我的项目中(使用Swift 3编写),我想要使用`indexOf(_:)`方法(在Swift 2.2中存在)从数组中检索元素的索引,但我找不到任何替代方法。在Swift 3中是否有任何好的替代方法或类似的方法?

更新

我忘记提到我想要在自定义对象中进行搜索。在代码提示中,当我输入'indexof'时,没有得到任何提示。但当我尝试获取内置类型(如`Int`)的索引时,代码提示起作用,并且我可以使用`index(of:)`方法。

0
0 Comments

Swift 3中的问题:array的indexOf(_ :)方法的替代方法

在Swift 3中,array的indexOf(_ :)方法已被重命名为index(of :),适用于符合Equatable协议的类型。你可以将任何类型都符合Equatable协议,而不仅仅是内置类型。

例如,我们可以定义一个Point结构体,使其符合Equatable协议,然后使用index(of :)方法来查找数组中的元素位置:

struct Point: Equatable {

var x, y: Int

}

func == (left: Point, right: Point) -> Bool {

return left.x == right.x && left.y == right.y

}

let points = [Point(x: 3, y: 5), Point(x: 7, y: 2), Point(x: 10, y: -4)]

points.index(of: Point(x: 7, y: 2)) // 1

另外,接受闭包的indexOf(_ :)方法已被重命名为index(where :):

[1, 3, 5, 4, 2].index(where: { $0 > 3 }) // 2

// or with a trailing closure:

[1, 3, 5, 4, 2].index { $0 > 3 } // 2

这里需要注意的是,符合Equatable协议非常重要。

0
0 Comments

Swift 3中,数组的indexOf(_:)方法被移除了,这给开发者带来了一些困惑。本文将介绍这个问题出现的原因以及可能的解决方法。

在Swift 3之前的版本中,我们可以使用数组的indexOf(_:)方法来获取某个元素在数组中的索引。然而,在Swift 3中,这个方法被移除了,这是因为Swift 3引入了更安全的语言特性,并且推荐使用更加明确的方法来替代。

为了解决这个问题,我们可以使用Equatable协议来实现自定义类型的相等比较。在上面的例子中,我们定义了一个名为MyClass的结构体,并实现了Equatable协议。这个结构体包含了一个名为title的属性,用来表示对象的标题。然后,我们重载了==操作符,使得两个MyClass对象可以进行相等比较。

通过这样的实现,我们现在可以使用Swift 3中的新方法index(where:)来获取某个元素在数组中的索引。这个方法接受一个闭包作为参数,该闭包定义了元素的匹配条件。在闭包中,我们可以使用之前定义的MyClass的相等比较来判断元素是否匹配。如果匹配成功,该方法将返回元素在数组中的索引。

通过这种方式,我们可以实现Swift 3中数组元素索引的获取,解决了indexOf(_:)方法被移除的问题。

总结起来,Swift 3中移除了数组的indexOf(_:)方法,这给开发者带来了一些困惑。为了解决这个问题,我们可以通过实现Equatable协议来自定义类型的相等比较,并使用index(where:)方法来获取元素在数组中的索引。这样,我们就能够在Swift 3中实现替代indexOf(_:)方法的功能了。

0
0 Comments

Swift 3 中的 XCode 8 对我不起作用,直到我给我的类添加了一个扩展。

例如:

class MyClass {

var key: String?

}

extension MyClass: Equatable {

static func == (lhs: MyClass, rhs: MyClass) -> Bool {

return MyClass.key == MyClass.key

}

}

在 Swift 3 中,`indexOf(_:)` 方法已经被移除了,这就是为什么在 XCode 8 中无法使用的原因。为了解决这个问题,我需要给我的类添加一个遵循 `Equatable` 协议的扩展。在扩展中,我实现了 `==` 操作符的重载,用于比较两个 `MyClass` 对象的 `key` 属性是否相等。

通过这个扩展,我就可以在 Swift 3 中使用新的方法来替代 `indexOf(_:)` 方法了。

0