iOS Swift 扩展(Extensions)

作者: 夏天然后 | 来源:发表于2016-04-25 17:00 被阅读275次
    一 可以为类添加新功能
    1. UIViewController
    extension UIViewController {
        // 为 UIViewController 添加的新功能写到这里
    }
    
    1. Double
    extension Double {
        var km: Double { return self * 1_000.0 }
        var m : Double { return self }
        var cm: Double { return self / 100.0 }
        var mm: Double { return self / 1_000.0 }
        var ft: Double { return self / 3.28084 }
        var sq: Double { return self * self }
    }
    
    1. ViewController
    extension ViewController{
        func printfChars()
        {
            print("I am char")
        }
    }
    
    二 可变实例方法(Mutating Instance Methods)

    通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改 self 或其属性的方法必须将该实例方法标注为 mutating,正如来自原始实现的可变方法一样。
    下面的例子为 Swift 的 Int 类型添加了一个名为 square 的可变方法,用于计算原始值的平方值:
    改变Int 值本身

    extension Int {
        mutating func square() {
            self = self * self
        }
    }
    
    三 嵌套类型(Nested Types)

    扩展可以为已有的类、结构体和枚举添加新的嵌套类型:

    extension Int {
        enum Kind {
            case Negative, Zero, Positive
        }
        var kind: Kind {
            switch self {
            case 0:
                return .Zero
            case let x where x > 0:
                return .Positive
            default:
                return .Negative
            }
        }
    }
    

    // 在ViewController: UIViewController 中
    // viewDidLoad

    self.printfChars()
    let oneInch = 25.4.mm
    print("One inch is \\(oneInch) meters") // One inch is 0.0254 meters
      let dou = 23.4.sq
      print("\\(dou)") // 547.56
    let numbers = [1,2,4,5,6,3,0,-54,-65]
    self.printIntegerKinds(numbers) // + + + + + + 0 - - 
    var intNumb = 5
    intNumb.square()
    print("\\(intNumb)") // 25
    

    该例子为 Int 添加了嵌套枚举。这个名为Kind 的枚举表示特定整数的类型。具体来说,就是表示整数是正数、零或者负数。
    这个例子还为 Int 添加了一个计算型实例属性,即 Kind,用来根据整数返回适当的 Kind 枚举成员。
    现在,这个嵌套枚举可以和任意 Int 值一起使用了:

    func printIntegerKinds(numbers: [Int]) {
            for number in numbers {
                switch number.kind {
                case .Negative:
                    print("- ", terminator: "")
                case .Zero:
                    print("0 ", terminator: "")
                case .Positive:
                    print("+ ", terminator: "")
                }
            }
            print("")
        }
    
    ---------------------------------------

    走心文章, 值得点赞 ---文/夏天然后
    微博-点我@夏天是个大人了 || QQQ: 498143780

    相关文章

      网友评论

        本文标题:iOS Swift 扩展(Extensions)

        本文链接:https://www.haomeiwen.com/subject/clcqrttx.html