美文网首页Swift之家
Swift 扩展(Extension)

Swift 扩展(Extension)

作者: 小小土豆dev | 来源:发表于2017-07-09 16:53 被阅读37次

扩展(Extension)

扩展:就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能。这包括在没有权限获取原始源代码的情况下扩展类型的能力(即 逆向建模)。扩展和 Objective-C 中的分类类似(与 Objective-C 不同的是,Swift 的扩展没有名字)

扩展作用

1、可以添加计算型属性和计算型类型属性

2、可以定义实例方法和类型方法

3、可以提供新的构造器

4、可以定义下标

5、可以定义和使用新的嵌套类型

6、可以使一个已有类型符合某个协议

扩展语法:

使用关键字 extension 来声明扩展

extension SomeType {

    // 为 SomeType 添加的新功能写到这里

}

可以通过扩展来扩展一个已有类型,使其采纳一个或多个协议。在这种情况下,无论是类还是结构体,协议名字的书写方式完全一样

extension SomeType: SomeProtocol, AnotherProctocol {

    // 协议实现写到这里

}

如果你通过扩展为一个已有类型添加新功能,那么新功能对该类型的所有已有实例都是可用的,即使它们是在这个扩展定义之前创建的。

计算型属性扩展

扩展可以为已有类型添加计算型实例属性和计算型类型属性。但是不可以添加存储型属性,也不可以为已有属性添加属性观察器。

extension Double {

    var cm: Double {

        return self / 100.0

    }

}

方法扩展

扩展可以为已有类型添加新的实例方法和类型方法。

extension Int {

func sum(_ num: Int) -> Int {

return self + num

}

}

构造器扩展:

扩展可以为已有类型添加新的构造器。这可以让你扩展其它类型,将你自己的定制类型作为其构造器参数,或者提供该类型的原始实现中未提供的额外初始化选项。

扩展能为类添加新的便利构造器,但是它们不能为类添加新的指定构造器或析构器。指定构造器和析构器必须总是由原始的类实现来提供。

extension Rect {

init(center: Point, size: Size) {

let originX = center.x - (size.width / 2)

let originY = center.y - (size.height / 2)

self.init(origin: Point(x: originX, y: originY), size: size)

}

}

下标扩展

扩展可以为已有类型添加新下标

extension Int {

     subscript(digitIndex: Int) -> Int {

          var decimalBase = 1

          for _ in 0..<digitIndex 

               decimalBase *=10

          }

          return (self / decimalBase) % 10

     }

}

746381295[0] // 返回 5

746381295[1] // 返回 9

746381295[2] // 返回 2

746381295[8] // 返回 7

嵌套类型扩展

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

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

    }}

}

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("")

}

printIntegerKinds([3, 19, -27, 0, -6, 0, 7]) // 打印 + + - 0 - 0 +

相关文章

  • Swift 命名空间形式扩展的理解和问题探讨

    先从 Swift 协议扩展的语法说起 注:协议扩展 Protocol extension: Swift 1.x 中...

  • Swift(九)协议和扩展

    更新:2018.05.24 整理了一下demo:SwiftDemo 扩展(Extension) Swift中,扩展...

  • Swift5.0 - day7-扩展、访问控制、内存管理

    一、扩展(Extension) 1.1、扩展介绍Swift中的扩展,有点类似于OC中的分类(Category)扩展...

  • Swift Extension(扩展)

    Swift中的扩展,类似OC中的分类Category 扩展可以为枚举、结构体、类、协议添加新功能 可以添加方法、计...

  • swift 扩展(extension)

    扩展(Extension)用于为已存在的类、结构题或枚举等类型添加新的功能。可以扩展计算型属性、构造函数、方法、下...

  • Swift 扩展(Extension)

    扩展(Extension) 扩展:就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能。这包括在没有权限获取...

  • Swift 扩展:Extension

    (转载自http://letsswift.com/2014/06/extensions/) 扩展就是向一个已有的类...

  • iOS-Swift-扩展

    1. 扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、...

  • [Swift5.1] 18-扩展

    扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、结构体...

  • 扩展

    扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、结构体...

网友评论

    本文标题:Swift 扩展(Extension)

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