Ios 在Swift中,应用商店中现有应用中的用户定义方法是否会覆盖未来的新API?

Ios 在Swift中,应用商店中现有应用中的用户定义方法是否会覆盖未来的新API?,ios,objective-c,iphone,xcode,swift,Ios,Objective C,Iphone,Xcode,Swift,例如,在Objective-C中,如果苹果向UIView添加名为method1的新方法,则已经发布到应用商店并使用以下代码的现有应用程序可能会崩溃或出现意外行为: // Objective-C @interface MyView : UIView - (void)method1; @end // Swift class MyView : UIView { func method1() { // do something } } 但在Swift中,要重写方法,

例如,在Objective-C中,如果苹果向UIView添加名为
method1
的新方法,则已经发布到应用商店并使用以下代码的现有应用程序可能会崩溃或出现意外行为:

// Objective-C
@interface MyView : UIView
- (void)method1;
@end

// Swift
class MyView : UIView {
    func method1() {
        // do something
    }
}

但在Swift中,要重写方法,需要一个
override
关键字来防止意外重写。 如果在没有
override
关键字的情况下重写方法,编译器将生成编译时错误。

如果苹果在下一个iOS版本中添加新的API方法,如果我的应用程序或你的应用程序使用与新API名称相同的方法,会发生什么情况。

在Swift中,新的API方法是否会被现有应用程序(如Objective-C)中的方法覆盖?
或者,由于Swift的显式覆盖功能(
override
keyword),新的API不会影响现有的同名用户定义方法


如果您的应用程序已经生成并上载,则不会出现问题

但是,如果您尝试为新的更新重新构建应用程序,但您运气不好,他们将一个新的Api方法命名为与您的对象方法相同的名称,那么您可能会遇到的错误很可能只有在您使用该方法的地方没有使用正确的标识符时,例如不调用self.method1()和只调用method1()并且您的对象继承自UIViewController,它恰好具有新的方法1

除此之外,我不会担心这种问题的发生,至少在我为iOS编程的3-4年里,我没有遇到过这样的问题

//Lets assume UIViewController has a new Method in the Api now which 
//they updated called   Method1

class MyViewController :UIViewController {


  init {
     //When you try to re-build your app this line of code right here would complain
     //because of ambiguity, two methods called the same one from your 
     //Parent Class and your own Class.
     //method1()

     //"super.method1()"  or code below to solve the ambiguity issue.
     self.method1()
  }

//Added this just because I happen to use UIViewController.
 override viewDidLoad() {
     super.viewDidLoad()
 }




  //Your own method without Override, since you want to use your own method. 
  func method1() {
    //Does something important
  }


}

根据您的评论更新:

1) 有关于它的文档吗,或者你自己用Swift测试过吗

我自己测试过,因为我在应用商店里有应用。因此,无论已经上传了什么,代码都会正常工作,因为您上传的应用程序使用当前的工作API和类对框架进行了预打包。 不,我没有看到关于它的文档,我知道它是因为我个人看到了它

2) 我认为,如果UIViewController已经有func method1(),那么如果没有override关键字,就无法定义func method1()


没错!假设APi已经有了一个方法,那么就有了write Override关键字,可以使用相同名称的函数。但请记住,根据您的场景,您提到API在您将项目上传到AppStore之后创建了具有该名称的方法。因此,只有在进行一些新的编码并尝试重建应用程序时,您才会看到这个问题

这对于您预先构建的常规旧dylib来说是非常危险的,但是SDK更新将需要重新构建和重新链接,这意味着编译器仍然会一如既往地向您抱怨。谢谢您的回答!请更详细地告诉我“如果你的应用程序已经构建并上传,那么你不会有问题。”。有关于它的文档吗,或者你自己用Swift测试过吗?如果
UIViewController
已经有
func method1()
,我认为如果没有
override
关键字,就无法定义
func method1()
。例如,如果我在定义
func viewDidLoad()
时没有
override
关键字,我的Xcode会生成编译错误。你说的“不会有问题”到底是什么意思?问题是“未来的新API是否会被现有应用程序中的用户定义方法覆盖”。您的答案是肯定的(它将被重写)对吗?是的,您必须使用重写,否则它将总是抱怨或更改您的方法名称。很抱歉,我可能对你的第一句评论理解错误。@StevenHernandez谢谢你的更新。应用程序是否在
Objective-C
以及
Swift
中使用当前工作的API和您的类对框架进行预打包?是的,它进行预打包。至少我还没有找到任何被改变的参考。还请记住,您可以将Swift和Obj-C代码合并到同一个文件中,因此,如果更改了该文件,则在上载时预打包将有许多潜在问题,这对任何人都不方便。(例如:许多应用程序会突然停止工作或错误严重,这是不好的)