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 子类中进行提示或使用。