swift - 如何告诉 Swift 在默认选项之间使用哪个函数签名

标签 swift xcode uikit ios13

我想实例化我创建的 Storyboard 的 Root View Controller 。

为此,我习惯于从 Storyboard调用 -instantiateInitialViewController()

问题是,自 iOS13 以来,出现了一个新的方法签名,它采用新的可选参数:(creator: ((NSCoder)->ViewController?)?)

Capture of Xcode showing autocompletion

令人烦恼的是 Xcode 认为我想使用新的 API,这使得我的应用程序与旧操作系统不兼容。

Capture of Xcode showing an inline error prompt

即使进行版本检查,我也无法绕过它。

Capture of Xcode still showing an error after applying a suggested fix

我的问题是:如何告诉编译器使用不带参数的方法签名?

最佳答案

问题快速解答:Xcode BUG

首先,正如您的屏幕截图所示,这是一个错误。 (尝试删除驱动数据或重新启动东西以使其工作)。以下是对您问题的答复。


说明:如何告诉编译器使用哪个方法签名

Swift 根据表达式中使用的类型推断函数签名。所以想象一下:

class ViewController { }
class UIViewController { }

func instantiateInitialViewController() -> UIViewController? {}
func instantiateInitialViewController() -> ViewController? {}

因此,调用此方法将是 instantiateInitialViewController() 的不明确使用:

let theController = instantiateInitialViewController()

解决方案是明确地告诉编译器期望的类型是什么:

let theController: ViewController? = instantiateInitialViewController()
let theOtherController: UIViewController? = instantiateInitialViewController()

新的 instantiateInitialViewController 返回类型是一个限制为 UIViewController 的协议(protocol) (ViewController)。所以它应该推断类型并且与旧的没有逻辑差异。所以保持冷静并让它推断;)

关于swift - 如何告诉 Swift 在默认选项之间使用哪个函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63397501/

相关文章:

swift - UIView 中神秘的 UIColor 行为以及 Swift 中的一般情况

ios - 手动动画 UIScrollView.contentOffset 时背景图案跳跃

ios - 列出 iOS 中的所有相册

ios - 执行操作后执行操作?

ios - 具有多个参数的 Swift 函数

ios - XCode 创建一个 Button Toggle,显示一张图像用于 On 和一张用于 Off 功能

ios - 可重用 UITableViewCell 与 UICollectionViewCell

ios - UIView 宽度和高度不适应约束

objective-c - 在 xcode 4 中设置 Box2D 和 Cocos2D

ios - 需要 UIResponder 链解释