我想实例化我创建的 Storyboard 的 Root View Controller 。
为此,我习惯于从 Storyboard调用 -instantiateInitialViewController()
。
问题是,自 iOS13 以来,出现了一个新的方法签名,它采用新的可选参数:(creator: ((NSCoder)->ViewController?)?)
令人烦恼的是 Xcode 认为我想使用新的 API,这使得我的应用程序与旧操作系统不兼容。
即使进行版本检查,我也无法绕过它。
我的问题是:如何告诉编译器使用不带参数的方法签名?
最佳答案
问题快速解答: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/