gpt4 book ai didi

ios - supportedInterfaceOrientations 方法不会覆盖其父类(super class)中的任何方法

转载 作者:IT王子 更新时间:2023-10-29 05:06:25 24 4
gpt4 key购买 nike

在 UIViewController 中,这段代码:

public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if let mainController = self.mainViewController{
return mainController.supportedInterfaceOrientations
}
return UIInterfaceOrientationMask.all
}

给出错误Method doesn't override any method from its superclass

我使用的是 Xcode 8 beta 4,iOS 部署目标是 9.0,Use Legacy Swift Language VersionBuild Settings 中设置为 No

如何将上面的代码转换为 Swift 3?

最佳答案

像这样:

override var supportedInterfaceOrientations : UIInterfaceOrientationMask {

...以及您拥有的其余部分。

一般模式

许多 Cocoa 方法现在都是属性,因此您可以将它们实现为覆盖计算变量。所以从种子 3(或更早)到种子 4 的模式是:

  • func更改为var

  • 删除()

  • ->改为:

这是可行的,因为计算变量有一个 getter 函数,所以你之前实现的函数简单地变成了 getter 函数。这些是只读属性,因此您不需要 setter。

同样受影响的方法有 preferredStatusBarStyleprefersStatusBarHiddenshouldAutorotatepreferredInterfaceOrientationForPresentation 等。在 Objective-C header 中查找 UIKIT_DEFINE_AS_PROPERTIES

启示

从长远来看,您还可以进行其他更改。例如,您可以添加一个 setter(将您的实现分为 getset 函数),这样您就可以将您的实现变成一个外观对于存储的属性。例如:

private var _orientations = UIInterfaceOrientationMask.portrait
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
get { return self._orientations }
set { self._orientations = newValue }
}

所以现在您的代码有办法设置这个值。如果您在不同的时间返回不同的值,这会使事情变得更清晰。

更多技术说明

有趣的是,此更改对现有的 Objective-C 代码没有直接影响,因为在 Objective-C 中,新属性声明 @property(nonatomic, readonly) UIInterfaceOrientationMask supportedInterfaceOrientations; 满足和以前一样的方法:

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}

原因是在 Objective-C 中,@property(readonly) 仅仅是一个相应的 getter 方法存在的 promise ,而这正是这个方法的含义。但是在Swift中,Objective-C属性的getter方法的写法是通过属性,也就是通过实例变量。因此只有 Swift 代码会受到更改的影响:您必须将方法重写为属性。

关于ios - supportedInterfaceOrientations 方法不会覆盖其父类(super class)中的任何方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38732948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com