首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用参数调用Swift闭包

用参数调用Swift闭包
EN

Stack Overflow用户
提问于 2015-06-07 13:54:04
回答 1查看 267关注 0票数 1

我是Swift的新手,我试图编写我的第一个函数,它调用用户传入的闭包。我很难调用我的函数(我把它命名为乐趣)。我在网上也找不到这方面的任何例子。我只想宣布我的结束(我不知道该怎么做?)然后根据布尔结果做出决定?这似乎很容易,但我不确定。

该方法的目标是根据用户规范删除数组中的重复项。在我的例子中,我可能想传递一个特定的类及其数组,然后删除所有具有相同名称属性的类(即匹配的名称字符串)。

代码语言:javascript
复制
extension Array{

    func removeDuplicates<T: Comparable>(fun: (elem: T, arr: [T]) -> Bool) -> [T]
    {
        var array = [T]()
        for element in self
        {
            if fun(elem: T(), arr: [T])
            {
                println("hello")
            }
        }

        return array
    }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-07 14:55:00

这是对Does there exist within Swift's API an easy way to remove duplicate elements from an array?的一个小小的概括,您可能需要这样做:

代码语言:javascript
复制
extension Array {

    func withoutDuplicates<U : Hashable>(attribute : T -> U) -> [T] {
        var result : [T] = []

        var seen : Set<U> = Set()
        for elem in self {
            let value = attribute(elem)
            if !seen.contains(value) {
                result.append(elem)
                seen.insert(value)
            }
        }

        return result
    }
}

attribute闭包应用于每个数组元素,并使用一个Set跟踪已经发生的值。因此,值类型U必须是Hashable (这是字符串的情况)。

示例:

代码语言:javascript
复制
struct Person : Printable {
    let firstName : String
    let lastName : String

    var description: String {
        return "\(firstName) \(lastName)"
    }
}

let array = [ 
    Person(firstName: "John", lastName: "Doe"),
    Person(firstName: "Joe", lastName: "Miller"),
    Person(firstName: "Jane", lastName: "Doe")
]

let result = array.withoutDuplicates( { $0.lastName } )
println(result)
// [John Doe, Joe Miller]

另一种实现是

代码语言:javascript
复制
func withoutDuplicates<U : Hashable>(attribute : T -> U) -> [T] {
    var seen : [U : Bool] = [:]
    return self.filter { seen.updateValue(true, forKey: attribute($0)) == nil }
}

它利用了这样一个事实,即updateValue()方法的Dictionary返回键的前一个值,特别是如果键以前没有设置,则返回nil。这也只是@rintaro对iOS Swift: Filter array to unique items的一个小小的概括。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30694324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档