Swift 扩展

Swift里的扩展extension 目录 扩展 扩展的语法 (extension关键字。在其他语言里用来表示继承 计算型属性(extension只能添加计算属性get方法,不能添加存储属性set方法,或观察者willSet、didSet,存储属性里 构造器(扩展构造器必须调用指定构造器。只是改变存储属性? 方法 (扩展示例方法和类方法) 可变实例方法(mutating关键字用来表示,可修改self或属性) 下标 嵌套类型 总结: 扩展 扩展可以给一个现有的类,结构体,枚举,还有协议添加新的功能。它还拥有不需要访问被扩 阅读详情
扩展的概念
  • 扩展就是向现有的类、结构体、枚举类型、或协议添加新的功能。
  • 扩展可以对一个类型添加新的功能,但是不能重写已有的功能。
  • 扩展和 Objective-C 中的 category 类似。(与 Objective-C 的分类不同的是,Swift 的扩展没有名 字。)
扩展的功能
  • 添加计算实例属性和计算类型属性
  • 定义实例方法和类型方法
  • 提供新初始化器
  • 定义下标
  • 定义和使用新内嵌类型
  • 使现有的类型遵循某协议
  • 扩展可以向一个类型添加新的方法,但是不能重写已有的方法
扩展的语法
  • 声明扩展使用 extension 关键字
extension SomeType {
    // 需要扩展的 SomeType 的新功能
}
  • 一个扩展可以扩展一个已有类型,使其能够适配一个或多个协议,语法格式如下:
extension SomeType: SomeProtocol, AnotherProtocol {
    // 协议实现
}
计算属性
  • 扩展可以向已有的类型添加计算实例属性和计算类型属性。
//向 Double 类型添加了 4 个计算型实例属性并扩展其功能
extension Double {
    var km: Double { return self * 1000.0 }
    var m: Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double {return self / 10000.0 }
}
let num1 = 1.2.km
print("num1 is \(num1) meters")
let num2 = 250.cm
print("num2 is \(num2) meters")
初始化器
  • 扩展可向已有的类型添加新的初始化器。这允许你扩展其他类型以使初始化器接收你的自定义类型作为形式参数,或提供该类型的原始实现中未包含的额外初始化选项。
  • 扩展能为类添加新的便捷初始化器,但是不能为类添加指定初始化器或反初始化器。指定初始化器 和反初始化器 必须由原来类的实现提供。
struct Size {
    var width = 0.0, height = 0.0
}
struct Point {
    var x = 0.0, y = 0.0
}
struct Rect {
    var origin = Point()
    var size = Size()
}
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)
    }
}
let centerRect = Rect(center: Point(x: 4, y: 4), size: Size(width: 3, height: 3))
方法
  • 扩展可以为已有的类型添加新的实例方法和类型方法。
//为实例方法添加扩展
extension Int {
    func repititions(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
}
3.repititions {
    print("hello")
}
/**  打印:
 hello
 hello
 hello
 */
mutating 方法
  • 扩展的实例方法仍可以修改(或异变)实例本身。结构体和枚举类型方法在修改 self 或本身的属性时必须标记实例方法为 mutating ,和原本实现的异变方法一样。
//异变方法
extension Int {
    mutating func square() {
        self = self * self
    }
}
var someInt = 3
someInt.square()
print(someInt) // 9
下标
  • 扩展能为已有的类型添加新的下标。
extension Int {
    subscript(digitalIndex: Int) -> Int {
        var decimalBase = 1
        for _ in 0..<digitalIndex {
            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, pozitive
    }
    var kind: Kind {
        switch self {
        case 0:
            return .zero
        case let x where x > 0:
            return .pozitive
        default:
            return .negative
        }
    }
}
print(3.kind)   // pozitive
Swift实用扩展:扩展库深度实践指南 本文还有配套的精品资源,点击获取 简介:SwiftExtensions是一种提高Swift语言代码简洁性和可读性的编程实践,通过为内置和自定义类型添加新功能,避免代码重复。本教程详述了扩展的基本概念,以及如何为String、Array、Dictionary等类型添加自定义方法,如检查字符串是否为数字、查找数组元素索引、UIView淡入动画等。扩展还可用于SwiftUI、UI... 阅读详情

相关推荐

R语言dlnm包避坑指南:手把手教你配置交叉基矩阵(附温度分层与滞后多项式设置)

本文详细介绍了R语言dlnm包在配置交叉基矩阵时的实用技巧与避坑指南,特别针对温度分层与滞后多项式设置提供了具体参数配置建议。通过解析`crossbasis()`函数的核心参数、温度分析的分层策略以及不同基函数的适用场景,帮助研究者高效构建分布滞后非线性模型,避免常见错误并优化模型性能。

weixin_34094282的博客 401

扩展(延展)

/* 扩展为现有的类、结构体、枚举类型、或协议添加了新功能。这也包括了为无访问权限的源代码扩展类型的能力(即所谓的逆向建模)。扩展和 Objective-C 中的分类类似。(与 Objective-C 的分类不同的是,Swift 的扩展没有名字。) Swift 中的扩展可以: 添加计算实例属性和计算类型属性; 定义实例方法和类型方法; 提供新初始化器; 定义下标...

weixin_30929295的博客 235

Memory SystemsCache, DRAM, Disk翻译学习DRAM部分(二)

DRAM 的发展史

qq_33473931的博客 995

swift class extension 与继承

1、扩展中无法继承重写已有函数,不能添加函数。 Extensions can add new functionality to a type, but they cannot override existing functionality. https://docs.swift.org/swift-book/LanguageGuide/Extensions.html 2、扩展函数的...

diaoju3333的博客 361

QTabWidget动态标签页管理:从代码创建到UI设计的实战指南

本文深入探讨了QTabWidget动态标签页管理的实战技巧,涵盖从纯代码创建到UI设计器布局的两种核心方法。详细讲解了如何动态添加、插入、关闭标签页,并管理其内容与生命周期。文章还提供了标签页精细化控制、界面优化(如设置图标、样式表)以及构建简易多文档编辑器的进阶实战案例,帮助开发者灵活应对数据监控、多文档编辑等复杂界面需求。

omega的博客 866

从零配置XDMA:手把手教你PCIe BAR与AXI总线的地址转换(基于Vivado2023)

本文基于Vivado2023,手把手教你配置XDMA IP核,深入解析PCIe BAR与AXI总线地址转换的核心原理。通过实战步骤,详细说明如何正确设置BAR参数(如32/64位、预取使能)及地址映射,确保主机能稳定访问FPGA侧寄存器与内存,是解决PCIe通信调试难题的关键指南。

2w3e4r5t6y的博客 1213

Swift 运算符重载

原文地址:Operator Overloading in Swift Tutorial(raywenderlich) 作者:Corinne Krych  译者:孟祥月(博客):在早前的iOS 8盛宴系列的教程里,你已经了解到,Swift提供了许多强大的、现代的编程特性,比如泛型、函数式编程、一等类型(first class)的枚举、结构体等特性。但是现在还有另外一个Swift的特性,你应该知道并且会

桂子的博客 3688

运放+三极管恒流源电路设计实战:从原理到仿真一步到位(附Multisim文件)

本文详细解析了运放与三极管构建恒流源电路的核心原理,重点阐述了负反馈机制如何实现精准的电流控制。通过Multisim仿真实战,从电路搭建、参数计算到负载调整率与动态响应分析,一步步指导设计过程,并提供常见故障的调试技巧与PCB设计要点,帮助工程师从理论平稳过渡到可靠实践。

7z8x2c4v6b9的博客 711

29、swift开发iOS——扩展

Swift 扩展 扩展就是向一个已有的类、结构体或枚举类型添加新功能。 扩展可以对一个类型添加新的功能,但是不能重写已有的功能。 Swift 中的扩展可以: 添加计算型属性和计算型静态属性 定义实例方法和类型方法 提供新的构造器 定义下标 定义和使用新的嵌套类型 使一个已有类型符合某个协议 语法 扩展声明使用关键字 extension: extension SomeType

badman250的专栏 3万+

【入门AUTOSAR网络管理测试】CANoe测试T_WakeUp时间

随着智能电动汽车行业的快速发展,目前AUTOSAR网络管理也得到了广泛应用,AUTOSAR网络管理测试也是汽车网络测试中非常重要的环节,NM问题导致的汽车ECU不能唤醒、电瓶亏电等问题,对于新入门AUTOSAR网络管理测试的同学不清楚如何开展测试,那么本章节就主要给大家介绍网络管理中T_WakeUp时间如何测试。【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读。

测试领域技术分享 2135

时频分析之短时傅里叶变换(STFT)

本文利用MATLAB自带的spectrogram函数对信号做短时傅里叶变换。首先介绍了短时傅里叶变换(STFT)的背景及意义;其次,对spectrogram函数的用法以及变量的含义做了详细的解释;最后,利用MATLAB编写程序实现了信号的STFT。

总结论文中的算法并给出论文的复现代码 7万+

swift扩展_Swift扩展

swift扩展Continuing with our series of Swift tutorials, we’ll be discussing and playing around with Swift Extension in this tutorial. 继续我们的Swift教程系列,我们将在本教程中讨论和使用Swift Extension。 Swift扩展 (Swift Extens...

从零开始的教程世界 502

数据预处理

数据预处理 数据预处理(数据清洗)是数据挖掘过程中的重要一步,它主要包括数据清洗,数据集成,数据变换和数据规约。 在我们进行数据挖掘的过程中,大量的原始数据中存在着大量有问题的数据(脏数据)比如有缺失值的,不一致的,有异常的,大量重复的数据等。这些脏数据会严重影响到数据挖掘建模过程的执行效率,也可能会使挖掘结果产生偏差。通过数据预处理(数据清洗)可以提高数据的质量,更好的适应特定的挖掘技术及工具。...

CJW的博客 9929

Swift笔记:Swift中的扩展语法

本文记录Swift中的扩展语法及其使用。

jclee95的个人博客 1463

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

swift 扩展_在Swift中使用扩展的示例

swift 扩展 最近,我需要在iOS应用中振荡图像。 我遇到了一个Swift代码示例,该示例演示了如何执行该操作,并且实际上很容易做到(有关公式背后的理论请参见this )。 该代码利用了Swift中的“扩展”功能。 这是Swift中一个非常酷的功能。 该功能使您可以扩展类的功能,而不必扩展类(例如您在Java中所做的事情)。 有关此功能的基本示例,请参见以下示例 。 在我的示例中,此功能用...

danpu0978的博客 123

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Swift扩展

Swift中的「扩展」(extensions)和OC中的categories类似,只是Swift中的「扩展」没有名字。Swift中的「扩展」可以向一个已有的类/结构体/枚举类型添加新功能,这包括在没有权限获取源代码的情况下扩展类型的能力(即逆向建模)。Swift中的「扩展」可以: 添加计算型实例属性和计算型类型属性; 定义实例方法和类型方法; 提供新的构造器; 定义下标(su...

dingzhengkuang5981的博客 224

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Swift-扩展

扩展可以给一个现有的类,结构体,枚举,还有协议添加新的功能。 拥有不需要访问被扩展类型源代码就能完成扩展的能力(即逆向建模)。(扩展和 Objective-C 的分类很相似,与 Objective-C 分类不同的是,Swift 扩展是没有名字的。) Swift 中的扩展可以: 添加计算型实例属性和计算型类属性 定义实例方法和类方法 提供新的构造器 定义下标 定义和使用新的嵌套类型 使已经存在...

hkasdfiu12 238

oc分类和swift扩展有哪些区别

特性Objective-C 分类Swift 扩展作用对象仅 Objective-C 类类、结构体、枚举、协议存储属性❌(需关联对象模拟)❌计算属性❌✅方法覆盖⚠️ 允许(有风险)❌ 编译禁止协议默认实现❌✅泛型支持❌✅(通过**where**子句)安全性低(运行时冲突)高(编译时检查)需动态添加属性/覆盖方法 →Objective-C 分类(需谨慎)。需类型安全/添加计算逻辑/扩展协议 →Swift 扩展。

chenzimin_blog 1112

swift 协议和扩展

在扩展里添加协议遵循 下面代码是伪代码 不能执行 知识为了帮助理解 你可以扩展一个已经穿在的类型来采纳和遵循一个新的协议,旧算时你无法访问现有的类型的源代码也行,扩展可以添加新的属性、方法、和下标到已经存在的类型。并且因此允许你添加协议需要的任何结果 //: FROM https://www.anuomob.com import UIKit protocol TextRepresentable{ var textualDescition:String{ get } } extensio

丿灬安之若死 363

Swift 之 扩展 与 协议

Swift 扩展 扩展就是向一个已有的类、结构体或枚举类型添加新功能。 扩展可以对一个类型添加新的功能,但是不能重写已有的功能。 Swift 中的扩展可以: 添加计算型属性和计算型静态属性 定义实例方法和类型方法 提供新的构造器 定义下标 定义和使用新的嵌套类型 使一个已有类型符合某个协议 语法 扩展声明使用关键字extension: extension SomeType { // 加到SomeType的新功能写到这里 } 一个扩展可以扩展一个已有类型,使其能够适配一个或.

u013712343的博客 969

swift扩展extension——swift学习(七)

首先看到swift扩展的时候,我就想起了OC的扩展和类别;于是我就在找swift的扩展和OC的扩展和类别是什么关系。经过几番查阅资料,发现swift的扩展和OC的类别是如出一辙。但是我又很一根筋地去查找swift类似OC扩展的东西是什么。但是我始终就是没找到,于是我就静下来想想,OC的扩展和分类的作用和区别是什么?使用场景是什么?所以,我们首先来看看OC的类别和扩展: 类别:可以动态的为现有类添加

u012297622的博客 9909

swift 扩展

扩展可以给一个现有的类,结构体,枚举,还有协议添加新的功能。它还拥有不需要访问被扩展类型源代码就能完成扩展的能力(即逆向建模) Swift 中的扩展可以: 添加计算型实例属性和计算型类属性 定义实例方法和类方法 提供新的构造器 定义下标 定义和使用新的嵌套类型 使已经存在的类型遵循(conform)一个协议 定义: extension SomeType { // 在这里给 SomeType 添加新的功能 } exten...

limonero 217
上一篇: iOS 绘制图片水印,并将图片保存到相册中
下一篇: Swift 协议
same_life
博客等级 码龄7年 25粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值