open > public > internal > fileprivate > private
- public表示当前类、属性或者方法只能在当前module内被继承或者 override,在当前module意外只能被访问;
- open表示当前类、属性或者方法可以在任何地方被继承或者override;是跨模块可以访问的。
- final是一个辅助修饰词,表示当前类、属性或者方法在任何地方都只能被访问,不能被继承或者override;
- internal表示默认级别,在本模块(项目、target)中可以访问。
Self 关键字
在Swift2.0, 将Self用于约束泛型,功能类似于OC中的instancetype,示例:extension Ordered where Self: Comparable
where的作用是限定协议的扩展的有效条件,使用Self来代表协议的遵守者。可以指定遵守者是某个类的子类或者遵守了某个协议。
protocol Coder {
var haveFun: Bool { get set }
var ownMoney: Bool { get set }
}
protocol Swifter {
var codingLevel: Int { get set }
func say()
}
extension Swifter {
func say() {
print("I can coding of Swift3.0")
}
}
extension Coder where Self: Swifter {
func say() {
print("I can coding of Swift3.0 and Java")
}
}
struct CoderA: Swifter {
internal var codingLevel: Int = 0
var name: String
var haveFun: Bool
var ownMoney: Bool
}
struct CoderB: Coder,Swifter {
var haveFun: Bool = true
var ownMoney: Bool = true
var codingLevel = 5
var name: String
}
let codera = CoderA(codingLevel: 5, name: "jjx", haveFun: false, ownMoney: false)
let coderb = CoderB(haveFun: true, ownMoney: true, codingLevel: 50, name: "xxxoo")
coderb.codingLevel
print("++++++++++")
codera.say() //I can coding of Swift3.0
coderb.say() //I can coding of Swift3.0
print("************************************************************")```
### @discardableResult忽略函数的的返回值
func show() -> Int {
return 5
}
show()///Result of call to 'show()' is unused
@discardableResult
func show() -> Int {
return 5
}
show()///OK
###@available
网友评论