广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >SwiftExtension扩展得使用详细介绍
  • 379
分享到

SwiftExtension扩展得使用详细介绍

2024-04-02 19:04:59 379人浏览 独家记忆
摘要

目录扩展(Extension)协议与初始化器协议泛型扩展(Extension) 1、Swift中的扩展,有点类似于OC中的分类(CateGory) 2、扩展可以为枚举、结构体、类、协

扩展(Extension)

1、Swift中的扩展,有点类似于OC中的分类(CateGory)

2、扩展可以为枚举、结构体、类、协议添加新功能

可以添加方法、计算属性、下标、(便捷)初始化器、嵌套类型、协议等等

3、扩展不能办到的事情

不能覆盖原有的功能

不能添加存储属性,不能向已有的属性添加属性观察器

不能添加父类

不能添加指定初始化器,不能添加反初始化器

。。。。

extension Double {
    var km: Double {
        self * 1_000.0
    }
    var m: Double {
        self
    }
    var dm: Double {
        self / 100.0
    }
    var cm: Double {
        self / 10.0
    }
    var mm: Double {
        self / 1_000.0
    }
}
var d = 100.0
d.km
d.m
d.dm
var arr: Array<Int> = [10, 20, 30]
extension Array {
    subscript(nullable idx: Int) -> Element? {
        if (startIndex ..< endIndex).contains(idx) {
            return self[idx]
        }
        return nil
    }
}
print(arr[nullable: 1] ?? 0)
extension Int {
    func repeats(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
    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
        }
    }
    subscript(digitIndex: Int) -> Int {
        var decimalBase = 1
        for _ in 0..<digitIndex {
            decimalBase *= 10
        }
        return (self / decimalBase) % 10
    }
}

协议与初始化器

class Person {
    var age: Int
    var name: String
    init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
}
extension Person: Equatable {
    static func == (left: Person, right: Person) -> Bool {
        left.age == right.age && left.name == right.name
    }
    convenience init() {
        self.init(age: 0, name: "")
    }
}

1、如果希望自定义初始化器的同时,编译器也能够生成默认初始化器,那么可以在扩展中编写自定义初始化器

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

2、required初始化器不能写在扩展中

协议

1、如果一个类型已经实现了协议的所有要求,但是还没有声明它遵守了这个协议

可以通过扩展来让它遵守这个协议

2、给协议进行扩展后,凡是遵守了这个协议的都会有对应的扩展方法,以下面为例,编写一个函数,判断一个证书是否为奇数。

extension BinaryInteger {
    func isOdd() -> Bool {
        self % 2 != 0
    }
}

3、扩展可以给协议提供默认实现,也间接实现 可选协议 的效果

protocol TestProtocol {
    func test1()
}
extension TestProtocol {
    func test1() {
        print("TestProtocol test1")
    }
    func test2() {
        print("TestProtocol test2")
    }
}
class TestClass: TestProtocol {
    func test1() {
        print("TestClass test1")
    }
    func test2() {
        print("TestClass test2")
    }
}
var cls: TestProtocol = TestClass()
cls.test1() //TestClass test1
cls.test2() //TestProtocol test2

泛型

1、扩展中依然可以使用原类型中的泛型类型

2、符合条件才扩展

extension Stack: Equatable where E: Equatable {
}

到此这篇关于Swift Extension扩展得使用详细介绍的文章就介绍到这了,更多相关Swift Extension内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SwiftExtension扩展得使用详细介绍

本文链接: https://www.lsjlt.com/news/167428.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SwiftExtension扩展得使用详细介绍
    目录扩展(Extension)协议与初始化器协议泛型扩展(Extension) 1、Swift中的扩展,有点类似于OC中的分类(Category) 2、扩展可以为枚举、结构体、类、协...
    99+
    2022-11-13
  • KotlinExtensionFunction扩展函数详细介绍
    目录1 什么是扩展函数(Extension Function)2 为什么使用扩展函数(Extension Function)3 如何使用扩展函数(Extension Function...
    99+
    2023-02-17
    Kotlin Extension Function Kotlin扩展函数
  • Kotlin扩展函数超详细介绍
    目录1.扩展函数2.infix 关键字3.扩展函数文件4.重命名扩展函数1.扩展函数 1)当我们没法接触某个类的定义,或者某个类没有用open修饰无法继承时,我们可以通过扩展函数,来...
    99+
    2022-11-13
  • Kotlin扩展方法超详细介绍
    目录前言一、扩展方法1.扩展方法的原型2.扩展方法的使用二、Kotlin扩展方法实现原理三、泛型扩展方法四、扩展属性五、为伴生对象添加扩展六、Kotlin 中常用的扩展七、案例前言 ...
    99+
    2022-11-13
  • PHP7代码加密扩展详细介绍
    这篇文章主要介绍了PHP7代码加密扩展详细介绍,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。特点简单快速,经实测,几乎不影响性能兼容 OPcache、Xdebug 等其他扩展...
    99+
    2023-06-14
  • C++BoostMultiIndex使用详细介绍
    目录一、关于BOOST的容器二、Boost.MultiIndex练习一、关于BOOST的容器 容器是 C++ 中最有用的数据结构之一。标准库提供了许多容器,而 Boost 库提供的更...
    99+
    2022-11-13
    C++ Boost MultiIndex C++ MultiIndex
  • fastjson 使用方法详细介绍
    Fastjson介绍Fastjson是一个Java语言编写的JSON处理器。遵循http://json.org标准,为其官方网站收录的参考实现之一。功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collection、M...
    99+
    2023-05-30
    fastjson 使用
  • ReentrantLock介绍及使用(超详细)
    点击 Mr.绵羊的知识星球 解锁更多优质文章。 目录 一、介绍 1. 简介 2. 是什么类型的锁 3. 优点 4. 原理 5. 主要方法 6. 使用时注意事项 二、实际应用 1. 案例一 2. 案例二 一、介绍 1. 简介     ...
    99+
    2023-09-20
    java 开发语言
  • TypeScript泛型使用详细介绍
    目录1 什么是泛型2 泛型方法3 泛型类4 泛型接口1 什么是泛型 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别...
    99+
    2022-11-13
    TypeScript泛型 TypeScript泛型使用方法
  • C++四种cast使用详细介绍
    目录一、static_cast1、基本数据类型转换2、指针和void指针的转换 3、父类和子类之间的转换二、dynamic_cast三、const_cast1、加上cons...
    99+
    2022-11-13
  • 详细介绍Github的使用方法
    随着互联网技术的不断发展,越来越多的开发者开始加入到开源项目中,Github作为目前全球最大的代码托管平台之一,也成为了开发者们分享、学习、合作的重要工具之一。然而,如何使用Github来进行代码管理、版本控制、协作开发等,还是很多新手开发...
    99+
    2023-10-22
  • Python 内置logging 使用详细介绍
    目录logging 的主要作用logging 日志等级logging 的基础函数logging 的四大组件(类)logging 的配置logging 和 print 的区别主要参考资...
    99+
    2022-11-11
  • Vuex详细介绍和使用方法
    目录一、什么是Vuex二、运行机制三、创建项目1、使用脚手架搭建Vue项目2、安装Vuex3、启动项目4、配置使用Vuex4.1、创建store文件夹4.2、配置全局使用store对...
    99+
    2022-11-13
  • Java中ArrayList的使用详细介绍
    目录1.ArrayList类1.1ArrayList类概述1.2ArrayList类常用方法1.2.1构造方法1.2.2成员方法1.2.3示例代码1.3ArrayList存储字符串并...
    99+
    2022-11-13
  • JetpackCompose布局的使用详细介绍
    目录一.标准布局组件二.修饰符三.滑动组件1.ScrollableRow和ScrollableColumn2.LazyRowFor和LazyColumnFor一.标准布局组件 Com...
    99+
    2022-11-13
  • TypeScript泛型的使用详细介绍
    目录情景再现使用泛型泛型类型泛型接口泛型类泛型约束在泛型里使用类类型[]高级案例情景再现 这里针对一种情况,也是非常常见的一种情况:那就是 function identity(arg...
    99+
    2022-11-13
  • SpringMVC配置与使用详细介绍
    目录一、SpringMVC的使用1、MVC模式2、具体的坐标如下3、配置DispatcheServlet4、编写springmvc.xml的配置文件二、SpringMVC原理1、Sp...
    99+
    2022-11-13
  • React Immutable使用方法详细介绍
    目录1. 介绍2. 优缺点3. 对象处理4. 数组处理5. 优化组件渲染6. immutable和redux集合使用1. 介绍 假设当前 redux 的大小为 1G,现在要修改 re...
    99+
    2022-11-13
  • Java反射使用的详细介绍
    文章目录 反射反射基本介绍反射获取类对象反射获取构造器对象反射获取成员变量对象反射获取方法对象 反射 反射基本介绍 反射概述: 反射认为类的每一个成份都是一个对象, 对于任何一个Class类,在"运行的时候"都可以直接得...
    99+
    2023-08-20
    java jvm 开发语言
  • 使用 docker 部署 APISIX的详细介绍
    二话不说,上个 docker-compose.yml 为敬! version: "3" services: apisix-dashboard: image: apache...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作