Controls de Acesso-迅捷3
Swift 3 nos trouxe almumasmutançasde controle de acesso interessantes。 随着开放的不同,公共的,内部的,私人的,私人的,私人的,天真的,不可思议的礼节。 费利斯曼特(Felizmente)像新星一样简单。 佩剑(Squiber)军刀:
São5níveisde acesso
Excessem cinconíveisde acesso que controlam,a partir de qual arquivo de origem oumódulovocêpod pod acessar alguma coisa。 Abaixo segue uma brevedescriçãode cadanível:
- 开放的:准公开资格的公开资格等级,合格的成员资格 (。swift)没有法定资格或法定资格。 在“ 子类别”或“ 子类别 ”中覆盖 “公开” 类别,在 “公开” 类别中不 公开或不公开类别中的任何类别。
- 公众人士: Permite que mesmo acesso que是“ open”, qualquer arquivo de origem em qualquermódulo,mas subclass eo over mais restritivo 。 Vocêsópode acessar de uma子类uma public class de dentro do mesmomódulo。 “公共”类的“公共”类不属于任何子类。 促进重要的秘密框架。 服务对象框架的使用是uc的子类,而ou类还是覆盖了“ open ”的 用法 。
- 内部:准许进入国家质量监督局,获得国防部监督。 Esteégeralmente onívelde acessopadrão。
- fileprivate:可以在原始文件中使用Permite。
- 私人: permite utilizar apenas part in dalaclaraçãodeinclusão。
注意类“ Objective-C emétodosagorasãoimportados como”是“开放的”。
Nãovamos entrar empânico
请在“内部”或“停产”中确认您的名字。 在复制中具有重要意义的部分是在复制时可以使用的。
在创建框架之后,请在第几周前提出要求,然后再使用原始文件或文件“私有”或“私有”。
Usando fileprivate和private
Vejamos alguns exemplos onde se pode querer usar fileprivate e private。 Suponha que eu tenho uma ViewController的qu pro uma proriedade que eunãoquero que seja acessado de fora do arquivo de origem(.swift)。 私人的Swift 2实用程序声明声明。 Abaixo segue um示例:
RootViewController类:UIViewController {
专用var标志=否
}
Infelizmente,使用Swift 3,在ViewController上进行部分扩展,在ViewController上没有配置,没有问题的解决方案:
扩展RootViewController:MyGreatDelegate {
func doSomething {
如果标志{
//做某事
}
}
}
//使用未解析的标识符“ flag”
“私有”问题或声明的“阶级”问题不再存在。 不存在“扩展名”,即“原始扩展名”。 一个简单易用的解决方案,文件的私有性 :
RootViewController类:UIViewController {
fileprivate var标志= false
}
例题:“私有”和“扩展”,以及“扩展”,“例题”,“代理”代表:
扩展RootViewController:UITextFieldDelegate {
func textFieldShouldReturn(_ textField:UITextField)-> Bool {
句柄(文本:textField.text)
textField.resignFirstResponder()
返回真
}
//Nãoéacessívelfora da扩展
私有函数句柄(文本:字符串?){
// 做点什么
}
}
乌玛迪卡*
吸气剂和吸气剂
设置者的使用效率低于设置的精度。
类MyDataSource {
//标记ésomente leitura fora desta类
private(set)var flag = false
// ...
}
由Padrão(一个私有的getter e setter)举个例子,“内部”。 Fazendo o setter ter um acesso denível“私有”是具有重要意义的,因为该类是“延伸”的da class没有原始的备忘录。 sequiséssemos扩展程序o acesso desta propriedadeteríamosque definir o acesso como Fileprivate setter:
fileprivate(set)var标志= false
单元测试目标
TesteUnitáriotem o seuprópriomódulo,“ mod quevocênãotem acesso aquaisquer tipos ou propriedade nomódulodeaplicaçãosãoporpadrãode acesso”的“内部”。 Mas para acessarvocêpode adicionar aos seus testes o atributo @testable :
导入XCTest
@testable导入MyDataSource
类MyDataSourceTests:XCTestCase {
// func testSomething(){...}
}
诺塔
最终的否决权, 最终权责发生制变质(公开权),并在UM 子类中进行提示或使用。