当前位置: 首页 > 面试题库 >

转换为Swift 3后,奇怪的通用函数出现在视图控制器中

澹台华采
2023-03-14
问题内容

在我的项目中,转换为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
  }
}

此功能有什么作用?我为什么需要它?


问题答案:

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

let a: Int? = nil
let b: Int? = 4

print(a < b) // true

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

此功能已被删除(SE-0121-删除可选的比较运算符),并且以上代码将无法在Xcode 8 beta 6中使用

错误:可选类型'Int?'的值 没有包装; 你是说用'!' 要么 '?'?

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

如果删除该定义,则应该看到在代码中进行比较的位置。然后尝试更新您的代码并删除可选的比较。



 类似资料:
  • 问题内容: 我没有找到有关此问题的文章,但没有一个解决我的问题。 就像我说的那样。 ViewControllerA ViewControllerB 我试图将添加为的子视图,但是它 抛出类似“ ” 的错误。 下面是代码… ViewControllerA ViewControllerB只是一个带有标签的简单屏幕。 ViewControllerB EDIT 根据用户答案的​​建议解决方案,ViewCon

  • 我想做的是: 由父视图控制器管理的父视图不应旋转。 由子视图控制器管理的子视图应该旋转到所有方向。 我所尝试的: 家长视图控制器 儿童视图控制器 Xcode部署信息中支持的方向设置为所有四个。 我得到的: 没有视图的旋转。如果将父视图的旋转设置为“全部”,则所有视图将一起旋转。所以要么全有要么全无。 更新 当我尝试放置UIDeviceOrientationIDChangeNotification的

  • 我找到了一些关于这个问题的帖子,但是没有一个能解决我的问题。 说像我已经... ViewControlllerA ViewControlllerB 我试图将ViewControlllerB添加为ViewControlllerA中的子视图,但是,它抛出了一个错误,如""。 下面是代码。。。 视图控制器 ViewControllerB只是一个带有标签的简单屏幕。 视图控制器B 编辑

  • 问题内容: 因此,我有一个带有按钮的根视图控制器,当用户按下该按钮时,将显示另一个视图控制器。第二个控制器具有一个关闭选项,该选项仅返回到根视图控制器,还有一个按钮,当用户触摸它时,该按钮将关闭当前视图控制器,以便它再次返回到根视图控制器并显示另一个按钮。转到我使用的第一个控制器: 在另一个视图控制器中,我选择仅关闭的按钮,然后执行此操作。 因此,对于需要解雇并显示另一个控制器的第二个控制器,我尝