- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
根据 Apple 的 THE Swift 书,而不是
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var reversed = sorted(names, { s1, s2 in return s1 > s2 })
因为闭包的主体包含返回 Bool 的单个表达式 s1 > s2,所以没有歧义,所以可以省略 return 关键字:
reversed = sorted(names, { s1, s2 in s1 > s2 })
好吧,这在 Playground 中不起作用。 Playground 中的错误是运算符“>”的使用不明确。
更新:同样,这个
reversed = sorted(names, { $0 > $1 })
不起作用。同样的错误。这个
reversed = sorted(names, { return $0 > $1 })
确实如此。
更新 2:在看到 Mike S 的回答后,我确信这个错误可能是由于 Swift String 和 NSString 引起的。我试过了
let nums = [3, 5, 1, 2, 10, 9]
var dec = sorted(nums, { n1, n2 in n1 > n2 })
var inc = sorted(nums, { n1, n2 in n1 < n2 })
无论是否使用 import 语句,它们都可以正常工作。 String 的解决方案还不错,因为现在我们只需要在想要使用 > 运算符比较 String 时键入 return。
那么这里可以解释什么(没有检查过正常项目)?
最佳答案
这里的问题实际上是比较String
秒。一个Array
的 Int
s 适用于 <
或 >
运算符,但带有 Array
的 Strings
s,只有 <
运算符将工作(无论如何从 Xcode 6.1 GM 开始)。
表明这是 String
的问题比较,在 Playground 中试试这个:
import Foundation
let result1 = "Chris" < "Alex" // false
let result2 = "Chris" > "Alex" // error: ambiguous use of operator '>'
如果您打开 Playground 的控制台输出,您还会看到:
Playground execution failed: <EXPR>:17:9: error: ambiguous use of operator '>'
"Chris" > "Alex"
^
Foundation.>:1:6: note: found this candidate
func >(lhs: String, rhs: NSString) -> Bool
^
Foundation.>:1:6: note: found this candidate
func >(lhs: NSString, rhs: String) -> Bool
因此,问题似乎是编译器无法确定 "Chris"
是否存在。和 "Alex"
是String
s 或 NSString
此外,如果你去掉默认的import
在 Playground 顶部声明,一切都会正常工作,因为 NSString
未导入,因此未桥接到 String
:
let result1 = "Chris" < "Alex" // false
let result2 = "Chris" > "Alex" // true
或者,使用问题中的代码(没有 import
):
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
let reversed = sorted(names, { $0 > $1 }) // [Alex, Barry, Chris, Daniella, Ewa]
但我无法回答的是,为什么 >
如果您使用 return
,确实有效闭包中的语句传递给 sorted
.
关于swift - swift playground 中单表达式闭包的隐式返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26249784/
最初我读到你不能在操场上尝试触摸或手势。然后我发现 touchesMoved 或点击手势会使用react。但是,我现在正在测试 UIPinchGestureRecognizer。没有可以让您在操场上使
我最近尝试打开/编辑 .playgroundbook project在 Xcode 版本 8.3.2 (8E2002) 中,有点惊讶它没有作为“liveView Playground”打开(我意识到它
我想在 Xcode 6.0.1 中使用 playground。所以文件 -> 新建 -> Playground 我立即得到错误。 Playground 执行终止,因为 Playground 进程意外退
在 Xcode 7 playgrounds 中运行最简单的默认代码...得到以下错误 Playground execution failed: Execution was interrupted, r
我已经开始了 Swift 编程入门类(class),到目前为止进展顺利,但我无法使用 Mac 来运行 Xcode。我确实有 iPad 版 Swift Playgrounds,它允许我完成作业并测试它们
GuidedTour Playground包含交互式和非交互式元素以及格式良好的文本。文本似乎已被锁定,无法编辑。我发现它是一个很好的学习工具。是否可以编辑其内容或创建类似的内容? 最佳答案 Play
我在 Xcode Playground 和 Swift Playground 上运行这段代码: import SwiftUI import PlaygroundSupport struct Conte
我正在 Xcode Playground 上玩弄 REST API,我需要用 SHA1 散列一些东西。我找到的所有解决方案都依赖于 Common Crypto,而这似乎不能直接在 Swift play
我知道如何在常规应用程序项目中使用 Xcode 11 中的 SwiftUI,但我想知道即使我不能使用实时编辑器,是否也可以在 playgrounds 中使用它? 最佳答案 当然,这很简单: impor
我知道如何在常规应用程序项目中使用 Xcode 11 中的 SwiftUI,但我想知道即使我不能使用实时编辑器,是否也可以在 playgrounds 中使用它? 最佳答案 当然,这很简单: impor
新创建的 Xcode 10 playground 提供了一个播放按钮来逐步执行 playground。 如果我打开在 iPad 或以前版本的 Xcode 中创建的 Playground ,播放按钮会丢
我注意到 Xcode 10 中的 Playgrounds 不再允许使用已声明但未初始化的变量。例如: 虽然此代码可以在 Xcode 9 playground 中运行,但在 Xcode 10 playg
我已经更新到 Xcode 6,最新的出现在 AppStore 上。我正在运行 OS X Yosemite Beta 3,显然,我只能打开 iOS playground,列表中缺少 OS X。 我附上了
我在 xcode 中开发了一个 ios 应用程序,我想在 swift playground 中运行这个应用程序。所以我想将我的 .xcodeproj 项目转换为 .playground 格式。那么有什
我尝试使用以下代码行创建滤色器 let parameters = [kCIInputColorKey: CIColor(string: "0.5 0.7 0.3 1.0")] let colorFil
我尝试使用以下代码行创建滤色器 let parameters = [kCIInputColorKey: CIColor(string: "0.5 0.7 0.3 1.0")] let colorFil
每次我创建一个新的 playground 以测试一些代码时,Xcode 都会卡住并且不会运行代码。它只是在屏幕顶部显示“Running playground”或“Launching simulator
我在应用程序开发方面相对较新,但出于兴趣,我想在 Xcode 上的 Playground 项目上实现此应用程序: http://merowing.info/2015/11/the-beauty-of-
我正在尝试使用 GraphQL 记录我的 API。对于可读性问题,我想在多行中留下评论,但它似乎不适用于常规的 '\n' 换行符 """ Return:\n true : DB save succ
我是 Swift 世界的新手。 如何将带逗号的字符串转换为带小数的字符串? 代码使用点 (.) 就可以正常工作 问题是当我使用逗号 (,) ... 时:var Price 问题的根源是十进制法语键盘使
我是一名优秀的程序员,十分优秀!