Swift语言精要 - 扩展(Extension)

swift的Extension用户在不访问代码的情况下扩展基本结构类型或自定义类

extension Int {
    var doubled : Int {
        return self * 2
    }
    func multiplyWith(anotherNumber: Int) -> Int {
        return self * anotherNumber
    }
}

测试代码如下:

2.doubled // = 4
4.multiplyWith(32) // = 128

 

扩展甚至还可以使类型实现某个协议

下面这个例子在其它语言看来有些怪异,但在swift来说却是稀疏平常

protocol Blinking {
    var isBlinking : Bool { get }
    var blinkSpeed: Double { get set }
    func startBlinking(blinkSpeed: Double) -> Void
}

extension Int : Blinking {
    var isBlinking : Bool {
        return false;
    }
    var blinkSpeed : Double {
        get {
            return 0.0;
        }
        set {
            // Do nothing
        }
    }
    func startBlinking(blinkSpeed : Double) {
        println("I am the integer \(self). I do not blink.")
    }
}

测试代码如下:

2.isBlinking // = false
2.startBlinking(2.0) // prints "I am the integer 2. I do not blink."

 

时间: 2024-10-26 18:40:33

Swift语言精要 - 扩展(Extension)的相关文章

Swift语言精要 - 浅谈结构体(Struct)

CGRect, CGSize, CGPoint这些是 . String, Int, Array, Dictionary这些我们经常用的也是结构体(Struct).   那么结构体(Struct)到底是什么呢? 学过C语言的朋友一定知道它是什么,在这里我就不多说了,你懂的. 我想说的重要的事情是,你必须搞清楚Struct和类的区别,在Swift中这点特别重要.   一下几点区别: 1) 结构体(Struct)不支持继承,而类(Class)则支持. 2) 结构体(Struct)有一个成员初始化器(m

Swift语言精要 - Operator(运算符重载)

运算符重载 Swift的这一语言特性或许应该启发于C++ class Vector2D { var x : Float = 0.0 var y : Float = 0.0 init (x : Float, y: Float) { self.x = x self.y = y } func +(left : Vector2D, right: Vector2D) -> Vector2D { let result = Vector2D(x: left.x + right.x, y: left.y + r

Swift语言精要-闭包(Closure)

闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生. 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包. 那么,什么是闭包呢? 让我们看下在Javascript中闭包的解释: Closures are functions that have access to variables from another function's scope. (This is often accomplished by

Swift语言精要 - 序列化和反序列化

在swift中你可以把一个对象转换成为数据,你所要做的就是 首先,你需要让对象实现NSObject和NSCoding协议. 其次,实现以下两个方法: encodeWithCoder init(coder aDecoder: NSCoder)  // 一个带NSCoder参数的初始化器 例子代码: class SerializableObject : NSObject, NSCoding { var name : String? func encodeWithCoder(aCoder: NSCod

Swift语言精要 - 浅谈代理模式(Delegate)

在iOS编程中,我们经常谈到代理代理,也就是delegate,那么什么是代理呢? 我们来看一下cocoa对它的描述: Delegation is Cocoa's term for passing off some responsibilities of an object to another 顾名思义: 代理是把职责从一个对象传到另一个对象. 其实,如果编写过Java或者C#程序的朋友应该知道,我们在设计的时候经常使用到接口和组合,道理是一样的. 看一下下面的代码:   首先,我们定义一个协议

Swift语言精要 - 属性

1. Stored Property eg: var number: Int = 0   2. Computed Property eg: var area : Double { get { return width * height }      ... } 完整代码如下: class Rectangle { var width: Double = 0.0 var height: Double = 0.0 var area : Double { // computed getter get {

Swift语言精要 - Dictionary(字典)

字典以键值对的形式存储数据. 键不能重复,但是值可以重复. 基本语法用例: var states : Dictionary<String, String> = ["CA" : "California"] var states : [String : String] = ["CA" : "California"] 也可以使用类型推断的方式: var states = ["CA" : "C

深入解析Swift语言中的协议_Swift

协议为方法,属性和其他要求的功能提供了一个蓝本.它只是描述了方法或属性的骨架,而不是实现.方法和属性实现还可以通过定义类,函数和枚举完成.协议的一致性是指方法或属性满足协议的要求. 语法协议也遵循类似类,结构和枚举的语法: 复制代码 代码如下: protocol SomeProtocol {     // protocol definition } 协议在类,结构或枚举类型命名声明.单个和多个协议的声明也是可以的.如果多个协议规定,它们必须用逗号分隔. 复制代码 代码如下: struct Som

iOS - Swift Swift 语言新特性

1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, 如可空性.类型化集合和一些别的特性. 2.编译器对冗余的协议一致性,未被使用的绑定值以及可以设为常量的变量这些情况目前会给予警告或报错. 3.修复了跨文件协议遵循时符号不可见或者重复的错误. 4.Swift 语言的调用约定更加智能,能够理解 API 所发生的变化和 Swift 所给出的警告. 5.便