美文网首页
Swift-OOP-扩展

Swift-OOP-扩展

作者: 守护地中海的花 | 来源:发表于2020-11-25 11:48 被阅读0次

概念

  • Swift中的扩展,有点类似于OC的分类(Category)
  • 扩展可以为枚举、结构体、类、协议添加新功能
  • 可以添加方法、计算属性、下标、(便捷)初始化器、嵌套类型、协议等等

扩展不难办到的事情

  • 不能覆盖原有的功能
  • 不能添加存储属性,不能向已有的属性添加属性观察器
  • 不能添加父类
  • 不能添加指定初始化器,不能添加反初始化器

计算属性、下标、方法、嵌套类型

extension Double {
    var km: Double  {self * 1_000.0}
}
var numer:Double = 10.0
print(numer.km)

协议

protocol Rule {
     func rule1()
}
class TestClass {
    func rule1() {
        print("rule1")
    }
}
extension TestClass : Rule {
    
}
  • 如果一个类型已经实现了协议的所有要求,但是还没有声明它遵守了这个协议
  • 可以通过扩展来让他遵守这个协议
protocol TestProtocol {
    func test1()
}
extension TestProtocol {
    func test1() {
        print("TestProtocol test1")
    }
    func test2() {
        print("TestProtocol test2")
    }
}
class TestClass1: TestProtocol {
    
}
var cls = TestClass1()
cls.test1()
cls.test2()
var cls2:TestProtocol = TestClass1()
cls2.test1()
cls2.test2()
  • 扩展可以给协议提供默认方法,也间接实现【可选协议】的效果
  • 扩展可以给协议扩充【协议中从未声明过的方法】

初始化器

struct Point {
    var x: Int = 10
    var y: Int = 10
}
extension Point {
    init(_ point: Point) {
        self.init(x: point.x, y: point.y)
    }
}

var p1 = Point()
var p2 = Point(x:10)
var p3 = Point(y:10)
var p4 = Point(x: 10, y: 10)
var p5 = Point(p4)

泛型

class Stack<E> {
    var elements = [E]()
    func push(element: E) {
        elements.append(element)
    }
    func pop() -> E {
        elements.removeLast()
    }
    func size() -> Int {
        elements.count
    }
}
//扩展中依然可以使用原类型中的泛型类型
extension Stack {
    func top() -> E {
        elements.last!
    }
}
//符合条件才扩展
  • 扩展中依然可以使用原类型中的泛型类型

相关文章

  • Swift-OOP-扩展

    概念 Swift中的扩展,有点类似于OC的分类(Category) 扩展可以为枚举、结构体、类、协议添加新功能 可...

  • Swift-OOP-继承

    简易代码 值类型(枚举、结构体)不支持继承,只有类支持继承 没有父类的类,称为:基类 Swift并没有像OC、Ja...

  • Swift-OOP-权限控制

    访问控制(Access Control) 在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排...

  • Swift-OOP-初始化器

    类、结构体、枚举都可以定义初始化器 类有2种初始化器:指定初始化器(designated)、便捷初始化器(conv...

  • Swift 扩展

    扩展UIView 扩展String 扩展UIColor 扩展UIButton 扩展String 扩展UIImage...

  • ES6扩展

    字符串的扩展正则的扩展数值的扩展数组的扩展函数的扩展对象的扩展

  • ES6扩展

    字符串扩展 正则扩展 数值扩展 函数扩展 对象扩展 数组扩展 字符串扩展 模版字符串 部分新的方法 padStar...

  • Swift--扩展

    扩展的概念 扩展计算属性 扩展方法 扩展构造函数 扩展下标 扩展的概念 在Swift中可以使用一种扩展机制,在原有...

  • 从Java到Kotlin(六)

    扩展与委托 目录 1.扩展 1.1 扩展函数 1.2 扩展属性 1.3 扩展伴生对象 1.4 扩展的作用域 2.委...

  • ES6基础-ES6的扩展

    进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, A...

网友评论

      本文标题:Swift-OOP-扩展

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