Swift中的required修饰符
http://www.52php.cn/article/p-spgdazcb-mx.html
普通子类 通常情况下,一说到 classMyClass{ varstr:String init(str:String){ self.str=str }}
当我们定义一个 classMyClass{ varstr:String init(str:String){ self.str=str }}classMySubClass:MyClass{ }varMySubClass(str:"Hello Swift")
大伙应该已经注意到了,在实例化 子类的初始化方法 如果我们在子类中添加一个 classMyClass{ varstr:String init(str:String){ self.str=str }}classMySubClass:MyClass{ overrideinit(str:String){ super.init(str:str) }}varMySubClass(str:"Hello Swift")
那么我们首先要在 在实际运用中,也有另外一种情况,当子类的初始化方法参数类型与父类的初始化方法参数类型不同时,我们就不必在子类的初始化方法前加 classMyClass{ varstr:String init(str:String){ self.str=str }}classMySubClass:MyClass{ init(i:Int){ super.init(str:String(i))}}MySubClass(i:10)
required修饰符 我们给父类的 classMyClass{ varstr:String requiredinit(str:String){ self.str=str }}classMySubClass:MyClass{ init(i:Int){ super.init(str:String(i)) }// 编译错误}MySubClass(i:10)
我们可以看到上面的代码在编译会发生错误,因为我们没有实现父类中要去必须要实现的方法。我们应该这样写: classMyClass{ varstr:String requiredinit(str:String){ self.str=str }}classMySubClass:MyClass{ requiredinit(str:String){ super.init(str:str) } init(i:Int){ super.init(str:String(i)) } }MySubClass(i:10)
从上面的代码示例中不难看出,如果子类需要添加异于父类的初始化方法时,必须先要实现父类中使用 如果子类中不需要添加任何初始化方法,我们则可以忽略父类的 classMyClass{ varstr:String requiredinit(str:String){ self.str=str }}classMySubClass:MyClass{}MySubClass(str:"hello swift")
在这种情况下,编译器不会报错,因为如果子类没有任何初始化方法时,Swift会默认使用父类的初始化方法。在Apple的文档中也有相关描述:
required修饰符的使用规则
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 导入flex项目提示未安装ASP.NET Development Ser
- ruby-on-rails-3.2 – 每页自定义kaminari宝石
- ruby-on-rails – Rails委托更新调用
- The file cannot be validated as the XML defin
- 从函数返回指向结构的指针
- objective-c – 单元测试失败,然后没有
- 跨域策略文件crossdomain.xml的配置方法
- ios – Swift – 如何创建正确的sectionForSecti
- ruby-on-rails-3 – sunspot_solr – NoMethodEr
- c# – 从属性而不是名称获取PropertyInfo