- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将一些代码移植到 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/
我有一个字典,它的键由 NSNumber 组成。我正在使用 keysSortedByValueUsingComparator 如下: NSArray *sortedKeys = [self.platf
我正在尝试将一些代码移植到 swift。到目前为止,做起来相当简单,但我坚持使用 keysSortedByValueUsingComparator。谁能帮我把我的 objc 代码翻译成 swift?
我是一名优秀的程序员,十分优秀!