gpt4 book ai didi

objective-c - swift 中的 keysSortedByValueUsingComparator

转载 作者:行者123 更新时间:2023-11-28 10:01:24 25 4
gpt4 key购买 nike

我正在尝试将一些代码移植到 swift。到目前为止,做起来相当简单,但我坚持使用 keysSortedByValueUsingComparator。谁能帮我把我的 objc 代码翻译成 swift?

我特别不明白如何翻译这个位:

keysSortedByValueUsingComparator:^(id obj1, id obj2) {}

我理解的大括号之间的东西

NSArray* matches = [startingExposureLookup keysSortedByValueUsingComparator:^(id obj1, id obj2) {
NSNumber* x = [NSNumber numberWithFloat:fabs([obj1 floatValue] - totalExposureTimeInSecondsFloat)];
NSNumber* y = [NSNumber numberWithFloat:fabs([obj2 floatValue] - totalExposureTimeInSecondsFloat)];
return [x compare:y];
}];

最佳答案

在 Swift 中,keysSortedByValueUsingComparator: 采用闭包(即 NSComparator ),其类型定义为

typealias NSComparator = (AnyObject!, AnyObject!) -> NSComparisonResult

所以你只需要传入一个闭包,它接受两个值进行比较并返回 NSComparisonResult 中定义的枚举值之一。 .

举个例子:

let dict: NSDictionary = ["b": 2, "a": 1]
dict.allKeys // ["b", "a"]

let keys = dict.keysSortedByValueUsingComparator {
(obj1: AnyObject!, obj2: AnyObject!) -> NSComparisonResult in
let x = obj1 as NSNumber
let y = obj2 as NSNumber
return x.compare(y)
}

keys // ["a", "b"]

注意 Swift 可以 infer the types闭包的参数和返回值的类型,所以你可以在传入闭包时省略类型声明:

let keys = dict.keysSortedByValueUsingComparator {
(obj1, obj2) in
let x = obj1 as NSNumber
let y = obj2 as NSNumber
return x.compare(y)
}

关于objective-c - swift 中的 keysSortedByValueUsingComparator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28129703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com