扩展

  1. 扩展基础
    1. swift的扩展使用关键字extension
    2. 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)
复制代码
  1. 构造器的扩展
    1. 枚举类型和结构体类型只能够有指定构造器没有便利构造器。而类能够有指定构造器和遍历构造器。
    2. 类既能够有构造器也能够有遍历构造器。
    3. 扩展只能够为枚举类型和结构体类型扩展指定构造器,不能扩展遍历构造器。
    4. 扩展只能给类扩展遍历构造器,不能扩展指定构造器。
//只能给类扩展遍历构造器
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")
复制代码
  1. 扩展方法
    1. 能够给结构体,类扩展实例方法,类方法。
    2. 能够给结构体,枚举类型扩展可变实例方法。
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))
复制代码
  1. 扩展下标
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])
复制代码
  1. 扩展嵌套类型
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])
复制代码
  1. 总结
    1. 枚举类型的扩展
      1. 能够给枚举类型扩展实例方法,类方法,实例可变方法。
      2. 能够扩展指定构造器。
      3. 能够扩展下标
      4. 能够扩展嵌套类型
    2. 结构体的扩展
      1. 能够扩展计算属性
      2. 能够扩展实例方法,类型方法,实例可变方法。
      3. 能够扩展指定构造器。
      4. 能够扩展下标。
      5. 能够扩展嵌套类型。
    3. 类的扩展
      1. 能够扩展计算属性。
      2. 能够扩展实例方法,类型方法。
      3. 能够扩展便利构造器。
      4. 能够扩展下标
      5. 能够扩展嵌套类型
相关文章
相关标签/搜索