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

时间:2014-10-29 14:51:05

标签: ios objective-c iphone xcode swift

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

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

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


但是在Swift中,要覆盖方法,您需要override关键字来防止意外覆盖。 如果覆盖没有override关键字的方法,则编译器会生成编译时错误
如果Apple在下一个iOS版本中添加新的API方法,并且我的应用程序或您的应用程序使用的名称与新API相同的方法将会发生什么?名。

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

1 个答案:

答案 0 :(得分:1)

如果您的应用已经构建并上传,则您不会遇到问题。

但是如果你试图为新的更新重新构建应用程序并且运气不好,他们将新的Api方法命名为对象方法的相同名称,很可能只有在你找到的地方才会出现错误使用你没有使用正确的标识符的方法,比如不调用self.method1()并只调用method1(),你的对象继承自UIViewController,它恰好具有新的Method1。

除此之外,我不担心会发生这种类型的问题,至少我没有遇到过这样的问题,这是我为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中自行测试过?

我自己测试过,因为我在App Store中有应用程序。因此,无论已经上传的是什么,代码都将正常工作,因为您上传的应用程序使用当前正在运行的Apis和您的类预打包Frameworks。 不,我没有看到有关它的文档,我知道它,因为我亲眼看到它。

2)如果UIViewController已经有func method1()

,我认为你不能在没有override关键字的情况下定义func method1()

多数民众赞成!假设APi已经有一个方法,你可以使用写入Override关键字来使用具有相同名称的该函数。但请记住,根据您的方案,您提到API在您已将项目上传到AppStore之后创建了具有该名称的方法。因此,在进行一些新的编码并尝试重建应用程序时,您只能看到它的问题。