我想这暧昧使用运营商的 '>'
simple2 = {s1, s2 in s1 > s2}
和
var simple2 = {$0 > $1}
,但仍表现出我
SWIFT 3封不明确使用 '运营商>'
我想这暧昧使用运营商的 '>'
simple2 = {s1, s2 in s1 > s2}
和
var simple2 = {$0 > $1}
,但仍表现出我
SWIFT 3封不明确使用 '运营商>'
的瓶盖re必须明确声明参数s1
和s2
的类型,并且该类型必须实现>
运算符。做这件事的典型方法是使该封闭的签名确保这两个参数是(a)相同的类型;和(b)符合Comparable
协议。
如果你想simple2
采取任何Comparable
类型,而不是关闭,你可以定义一个通用的功能:
func simple2<T: Comparable>(_ s1: T, _ s2: T) -> Bool {
return s1 > s2
}
然后,你可以与任何类型Comparable
调用它。
您需要指定y s1
和s2
和$0
和$1
的类型。甚至连人都不能推断出你想要的是什么类型,更不用说Swift编译器了。
>
可应用于多种类型。下面是一些例子:
Int
和Int
Double
和Double
CGFloat
和CGFloat
您可以指定类型是这样的:
let simple2: (Int, Int) -> Bool = {$0 > $1}
我认为Xcode不仅仅是智能xD –
@EkramulHoque它会如何知道?即使我知道你是否想要比较整数,字符串或其他任何东西 – Alexander
这些类型可能不够清晰。它不知道使用哪个超载。尝试添加类型注释或任何Swift使用。 – Carcigenicate