- 擴展基礎
- swift的擴展使用關鍵字extension
- swift的擴展至關於OC的分類,即只能新增方法不能新增存儲屬性。
extension Double {
var km: Double {
return self * 1000
}
var cm: Double {
return self / 100.0
}
var mm: Double {
return self / 1000.0
}
}
var a: Double = 1000
print(a.cm)
複製代碼
- 構造器的擴展
- 枚舉類型和結構體類型只能夠有指定構造器沒有便利構造器。而類能夠有指定構造器和遍歷構造器。
- 類既能夠有構造器也能夠有遍歷構造器。
- 擴展只能夠爲枚舉類型和結構體類型擴展指定構造器,不能擴展遍歷構造器。
- 擴展只能給類擴展遍歷構造器,不能擴展指定構造器。
//只能給類擴展遍歷構造器
class Test {
var name: String = ""
init(name: String) {
self.name = name
}
}
extension Test {
convenience init(nameStr: String) {
self.init(name: nameStr)
self.name = nameStr
}
}
//只能給結構體,枚舉擴展指定構造器
struct TestStruct {
var name: String
init(name: String) {
self.name = name
}
}
extension TestStruct {
init(nameStr: String) {
self.init(name: nameStr)
self.name = nameStr + "test"
}
}
enum TestEnum {
case one, two ,three
}
extension TestEnum {
init(type: String) {
switch type {
case "one":
self = .one
case "two":
self = .two
case "three":
self = .three
default:
self = .one
}
}
}
var a = TestEnum(type: "one")
複製代碼
- 擴展方法
- 能夠給結構體,類擴展實例方法,類方法。
- 能夠給結構體,枚舉類型擴展可變實例方法。
extension Int {
//1. 擴展實例方法
func repeatClosure(closure: () -> Void){
for _ in 0..<self{
closure()
}
}
//2. 擴展可變實例方法 (結構體或者枚舉類型用)
mutating func square(){
self = self * self
}
//3. 擴展類方法
static func sum(_ one: Int, _ two: Int) -> Int{
return one + two
}
}
3.repeatClosure {
print("Hello World!")
}
var a = 3
a.square()
print(a)
print(Int.sum(3,5))
複製代碼
- 擴展下標
extension Int {
subscript(num: Int) -> Int {
var numShi = 1
for _ in 0..<num{
numShi *= 10
}
return (self/numShi) % 10
}
}
var a = 123456789
print(a[0])
print(a[2])
複製代碼
- 擴展嵌套類型
extension Int {
enum Kind: String {
case negative, zero, positive
}
var kind: Kind {
switch self {
case 0:
return .zero
case let x where x > 0:
return .positive
default:
return .negative
}
}
}
func check(numbers: [Int]) {
for item in numbers {
switch item.kind {
case .negative:
print("-", terminator: " ")
case .zero:
print("0", terminator: " ")
case .positive:
print("+", terminator: " ")
}
}
}
check(numbers: [3, 19, -27, 0, -6, 0, 7])
複製代碼
- 總結
- 枚舉類型的擴展
- 能夠給枚舉類型擴展實例方法,類方法,實例可變方法。
- 能夠擴展指定構造器。
- 能夠擴展下標
- 能夠擴展嵌套類型
- 結構體的擴展
- 能夠擴展計算屬性
- 能夠擴展實例方法,類型方法,實例可變方法。
- 能夠擴展指定構造器。
- 能夠擴展下標。
- 能夠擴展嵌套類型。
- 類的擴展
- 能夠擴展計算屬性。
- 能夠擴展實例方法,類型方法。
- 能夠擴展便利構造器。
- 能夠擴展下標
- 能夠擴展嵌套類型