无法在Swift Array扩展中使用包含

科琳

我正在尝试编写一个简单的Array扩展,该扩展提供了“ distinct”方法。这是我到目前为止的内容:

extension Array {
  func distinct() -> T[] {
    var rtn = T[]()

    for x in self {
      var containsItem = contains(rtn, x)
      if !containsItem {
        rtn.append(x)
      }
    }
    return rtn
  }
 }

问题是“包含”语句失败,如下所示:

找不到包含所提供参数的“包含”的重载

我很确定类型约束是正确的。有任何想法吗?

恩舒姆

斯威夫特1.x

元素中的元素array不必是Equatable,即它们不必与==

这意味着您不能为所有可能的数组编写该函数而且Swift不允许您仅扩展Arrays的子集。

这意味着您应该将其作为一个单独的函数编写(这也可能就是为什么contains它都不是方法)的原因。

let array = ["a", "b", "c", "a"]

func distinct<T: Equatable>(array: [T]) -> [T] {
    var rtn = [T]()

    for x in array {
        var containsItem = contains(rtn, x)
        if !containsItem {
            rtn.append(x)
        }
    }
    return rtn
}

distinct(array) // ["a", "b", "c"]

Swift 2 / Xcode 7(Beta)更新

Swift 2支持将扩展限制为协议实现的子集,因此现在允许以下操作:

let array = ["a", "b", "c", "a"]

extension SequenceType where Generator.Element: Comparable {
    func distinct() -> [Generator.Element] {
        var rtn: [Generator.Element] = []

        for x in self {
            if !rtn.contains(x) {
                rtn.append(x)
            }
        }
        return rtn
    }
}

array.distinct() // ["a", "b", "c"]

请注意苹果如何SequenceType.contains使用相同的语法添加的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift:在 NSPredicate 中使用扩展

来自分类Dev

Firebase注销无法在Swift中使用

来自分类Dev

无法在Swift中使用nil调用CGPathMoveToPoint()

来自分类Dev

无法在Swift Mailer函数中使用数组

来自分类Dev

无法在Swift中使用NSPredicate查询日期

来自分类Dev

Firebase注销无法在Swift中使用

来自分类Dev

无法在WSL vscode中使用python扩展

来自分类Dev

无法扩展 cURL 命令中使用的变量

来自分类Dev

Swift:无法使用NSImage .imageNamed

来自分类Dev

Swift:无法使用NSImage .imageNamed

来自分类Dev

无法使用 Swift 上传图片

来自分类Dev

Swift包含数组扩展

来自分类Dev

无法在Swift 2.3中编译Siri扩展

来自分类Dev

在Swift 2中无法使用方法“包含”

来自分类Dev

无法在“自身”中分配给“”-在Swift中使用元组

来自分类Dev

在iOS中使用Google SignIn后无法获取Authcode(Swift)

来自分类Dev

无法在“自身”中分配给“”-在Swift中使用元组

来自分类Dev

在Swift中使用注释-.addAnnotation()无法正常工作

来自分类Dev

无法在Swift 3中使用闭包语法

来自分类Dev

无法在Swift中使用前置摄像头

来自分类Dev

在 Swift 中使用 Spring 链接动画将无法正常工作

来自分类常见问题

在Swift中使用where子句扩展数组类型

来自分类Dev

在字典扩展(Swift)中使用未声明的类型'KeyType'

来自分类Dev

在iOS Swift中使用Realm进行应用和共享扩展?

来自分类Dev

无法在Ubuntu 13.10(Apache)中使用PHP扩展Solr

来自分类Dev

无法在NodeJS中使用Mongoose和Typescript扩展基类

来自分类Dev

Javascript无法在Google Chrome扩展程序中使用

来自分类Dev

无法在Google Chrome扩展程序中使用jQuery

来自分类Dev

8.3之后无法在Spotlight中使用键盘扩展

Related 相关文章

热门标签

归档