【问题标题】:Strange generic function appear in view controller after converting to swift 3转换为 swift 3 后,视图控制器中出现奇怪的通用函数
【发布时间】:2017-01-08 03:02:13
【问题描述】:

在我的项目中,转成swift 3后,我的ViewController类前出现了一个新函数:

fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
   switch (lhs, rhs) {
  case let (l?, r?):
    return l < r
  case (nil, _?):
    return true
  default:
    return false
  }
}

这个函数有什么作用?为什么我需要它?

【问题讨论】:

    标签: ios swift swift3


    【解决方案1】:

    这很有趣。在最新的 Swift 3 之前,你可以 比较可选值,例如

    let a: Int? = nil
    let b: Int? = 4
    
    print(a < b) // true
    

    并且nil 被认为小于所有非可选值。

    此功能已被删除 (SE-0121 – Remove Optional Comparison Operators),上面的代码将无法编译 在 Xcode 8 beta 6 中带有

    错误:可选类型“Int?”的值未拆封;你的意思是用'!'要么 '?'?

    显然,Swift 迁移器通过以下方式为您解决了这个问题 提供一个自定义 &lt; 运算符,它采用两个可选操作数 因此“恢复”了旧的行为。

    如果您删除该定义,那么您应该看到 比较是在您的代码中完成的。然后尝试更新您的代码 并删除可选的比较。

    【讨论】:

    • 所以这基本上意味着在大多数情况下我可以简单地删除它?我不需要将 nil 与可选项进行比较。
    • @BrightFuture:根据我的经验,Xcode 仅在某处需要它时才添加。尝试删除它,看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2013-07-28
    • 2014-02-04
    • 2016-12-07
    相关资源
    最近更新 更多