在Swift中,未来的新API会被App Store上现有应用程序中的用户定义方法覆盖吗



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

// 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关键字),新的API不会影响现有的同名用户定义方法

如果你的应用程序已经构建并上传了,那么你就不会有问题。

但是,如果你试图为新的更新重新构建应用程序,但运气不好,他们将一个新的Api方法命名为与你的Object方法相同的名称,那么你可能会遇到的错误很可能是,只有当你使用该方法的地方没有使用正确的标识符,比如不调用self.method1(),只调用method1(,其恰好具有新方法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 method 1()

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

相关内容

最新更新