当前位置:K88软件开发文章中心编程语言APP编程Swift01 → 文章内容

Swift 访问控制

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:31:35

同于其他类型,比如,public访问级别的其他类型,他们成员的访问级别为internal。实例public protocol TcpProtocol {init(no1: Int)}public class MainClass {var no1: Int // local storageinit(no1: Int) {self.no1 = no1 // initialization}}class SubClass: MainClass, TcpProtocol {var no2: Intinit(no1: Int, no2 : Int) {self.no2 = no2super.init(no1:no1)}// Requires only one parameter for convenient methodrequired override convenience init(no1: Int) {self.init(no1:no1, no2:0)}}let res = MainClass(no1: 20)let show = SubClass(no1: 30, no2: 50)print("res is: \(res.no1)")print("res is: \(show.no1)")print("res is: \(show.no2)")以上程序执行输出结果为:res is: 20res is: 30res is: 50扩展访问权限你可以在条件允许的情况下对类、结构体、枚举进行扩展。扩展成员应该具有和原始类成员一致的访问级别。比如你扩展了一个公共类型,那么你新加的成员应该具有和原始成员一样的默认的internal访问级别。或者,你可以明确申明扩展的访问级别(比如使用private extension)给该扩展内所有成员申明一个新的默认访问级别。这个新的默认访问级别仍然可以被单独成员所申明的访问级别所覆盖。泛型访问权限泛型类型或泛型函数的访问级别取泛型类型、函数本身、泛型类型参数三者中的最低访问级别。实例public struct TOS<T> {var items = [T]()private mutating func push(item: T) {items.append(item)}mutating func pop() -> T {return items.removeLast()}}var tos = TOS<String>()tos.push("Swift")print(tos.items)tos.push("泛型")print(tos.items)tos.push("类型参数")print(tos.items)tos.push("类型参数名")print(tos.items)let deletetos = tos.pop()以上程序执行输出结果为:["Swift"]["Swift", "泛型"]["Swift", "泛型", "类型参数"]["Swift", "泛型", "类型参数", "类型参数名"]类型别名任何你定义的类型别名都会被当作不同的类型,以便于进行访问控制。一个类型别名的访问级别不可高于原类型的访问级别。比如说,一个private级别的类型别名可以设定给一个public、internal、private的类型,但是一个public级别的类型别名只能设定给一个public级别的类型,不能设定给internal或private 级别的类型。注意:这条规则也适用于为满足协议一致性而给相关类型命名别名的情况。实例public protocol Container {typealias ItemTypemutating func append(item: ItemType)var count: Int { get }subscript(i: Int) -> ItemType { get }}struct Stack<T>: Container {// original Stack<T> implementationvar items = [T]()mutating func push(item: T) {items.append(item)}mutating func pop() -> T {return items.removeLast()}// conformance to the Container protocolmutating func append(item: T) {self.push(item)}var count: Int {return items.count}subscript(i: Int) -> T {return items[i]}}func allItemsMatch<C1: Container, C2: Containerwhere C1.ItemType == C2.ItemType, C1.ItemType: Equatable>(someContainer: C1, anotherContainer: C2) -> Bool {// check that both containers contain the same number of itemsif someContainer.count != anotherContainer.count {return false}// check each pair of items to see if they are equivalentfor i in 0..<someContainer.count {if someContainer[i] != anotherContainer[i] {return false}}// all items match, so return truereturn true}var tos = Stack<String>()tos.push("Swift")print(tos.items)tos.push("泛型")print(tos.items)tos.push("Where 语句")print(tos.items)var eos = ["Swift", "泛型", "Where 语句"]print(eos)以上程序执行输出结果为:["Swift"]["Swift", "泛型"]["Swift", "泛型", "Where 语句"]["Swift", "泛型", "Where 语句"]

上一页  [1] [2] 


Swift 访问控制