Swift基础 - 扩展 翻译自:https://docs.swift.org/swift-book/LanguageGuide/Extensions.html 扩展为现有类、结构、枚举或协议类型添加了新功能...这包括扩展您无法访问原始源代码(称为追溯建模)的类型的能力。扩展类似于Objective-C中的类别。(与Objective-C类别不同,Swift扩展没有名称。)...Swift中的扩展可以: 添加计算实例属性和计算类型属性 定义实例方法和类型方法 提供新的初始化器 定义下标 定义和使用新的嵌套类型 使现有类型符合协议 在 Swift 中,您甚至可以扩展协议,以提供其要求的实现...此示例为Swift的内置Double类型添加了五个计算实例属性,为使用距离单元提供基本支持: extension Double { var km: Double { return self *...此示例为Swift的内置Int类型添加了整数下标。
扩展允许我们以一种非常干净的方式修改Swift的数据类型以添加新的功能——我们的新代码与现有代码没有区别。 让我们从一个扩展开始,它将一个扩展添加到一个整数。...您可能会认为我们需要执行以下操作: extension Int { func plusOne() { self += 1 } } 这会删除返回值,因为我们现在不返回任何东西,并且它使用+=运算符将一个加到...Xcode真正的意思是,默认情况下,Swift不允许您在扩展中修改self。原因是我们可以使用5.plusOne()来调用plusOne(),显然您不能将数字5修改为其他含义。...用于命名扩展文件的常见命名方案是Type+Modifier.swift,例如String+RandomLetter.swift。...本文来自Hacking with Swift 给 swift 初学者的入门课程 Swift for Complete Beginners 的 Extensions
本篇将详细总结介绍Swift扩展的用法; 扩展就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能。...这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模 ) 主要内容: 1.理解扩展 2.扩展的基本使用 3.嵌套类型 4.扩展系统类库 一、理解扩展 1.1扩展特点: 1.扩展和 Objective-C...(与 Objective-C 不同的是,Swift 的扩展没有名字。) 3.扩展可以为一个类型添加新的功能,但是不能重写已有的功能 1.2扩展功能: 1、添加计算型实例属性和计算型类型属性。...二、扩展的基本使用 定义如下的Point 、Size、Rectangle,并对其进行扩展。...2.4.扩展下标 扩展可以为已有类型添加新下标。下面的例子为Swift内建类型Int添加了一个整型下标。
运算符是你在第一堂数学课上学到的那些小符号:+、-、*、/,=等等。它们都存在于Swift,还有一些额外的东西。...比较运算符 Swift有一组对值执行比较的运算符。...现在,有一件事可能会让您明白,在Swift字符串中是区分大小写的,这意味着“Tim McGraw”、“Tim McGraw”和“Tim McGraw”都被认为是不同的。...还有一个运算符我想给你介绍,它叫“非”运算符!。是的,只是个感叹号。这使得你的陈述与它所做的相反。例如: var stayOutTooLate = true stayOutTooLate !...= "Tim McGraw" 本文来自Hacking with Swift给swift初学者的入门课程Swift for Complete Beginners 的 Operators
---- 给存在的类型增加扩展 a.我们演示一个简单的例子 先定义一个协议 protocol Custom { var describe:String{get} } 通过扩展的方式,让Int...extension Int:Custom{ var describe:String{ return String(self) } } 高级用法 a.需求: 给Array 扩展一个属性...typealias CompatableType = String // 给自定义变量名指定变量,即实现 var name:String{ return "人" } } 当然由于Swift...有类型推断能力,可以像下面这样写 class Person:Draw{ var name:String{ return "人" } } 你不能干的事情 不能给对象扩展存储属性
Swift最强大的功能之一就是能够同时扩展整个数据类型。 这被称为协议扩展,它们通常用于在大型应用程序中构建灵活性。 您已经了解了协议如何使我们定义遵循协议类型必须采用的约定。...: 5)) Swift的解决方案是让我们创建协议扩展:这些扩展可以一次修改多种数据类型。...对于扩展协议,这很重要,因为声明了我们的clamp() 方法。...} } 结语 到此结束有关Swift编程语言的旅程。...本文来自Hacking with Swift 给 swift 初学者的入门课程 Swift for Complete Beginners 的 Protocol extensions
术语 一元运算符对单一操作对象操作,如 -a 一元运算符分前置运算符和后置运算符 前置运算符需紧跟在操作对象之前,如 !b 后置运算符需紧跟在操作对象之后,如 c!...二元运算符操作两个操作对象,是中置的,因为它们出现在两个操作对象之间,如 2 + 3 三元运算符操作三个操作对象,和 C 语言一样,Swift 只有一个三元运算符,就是三目运算符,a ?...b : c 受运算符影响的值叫操作数,在表达式 1 + 2 中,加号 + 是二元运算符,它的两个操作数是值 1 和 2 赋值运算符 let a = 10 let (x, y) = (1, 2) 算术运算符...1 + 2 3 - 1 2 * 3 10 / 2 10 % 2 //字符串相加 "hello, " + "world" // 等于 "hello, world" 组合赋值运算符 var...// true,因为 3 等于 3,但是 apple 小于 bird (4, "dog") == (4, "dog") // true,因为 4 等于 4,dog 等于 dog 注意: Swift
Swift还提供了C中找不到的范围运算符,例如a..<b和a...b,作为表达一系列值的快捷方式。 本章介绍了Swift中的常见运算符。...有关Swift标准库提供的运算符的信息,请参阅运算符声明。 比较运算符 Swift 支持以下比较运算符: Equal to (a == b) Not equal to (a !...避免将三元条件运算符的多个实例组合成一个复合语句。 nil 合并运算符 零共同化操作员(a??b) 如果可选a包含一个值,则解开它,如果a为nil则返回默认值b。表达式a总是可选类型。...逻辑运算符修改或组合布尔逻辑值true和false。...组合逻辑运算符 您可以组合多个逻辑运算符来创建更长的复合表达式: if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword
目前有时间,打算复习一下Swift,打算抽时间写个Swift基础教程系列。今天就说一下区间运算符。...闭区间运算符 闭区间运算符(a...b)定义一个包含从 a 到 b(包括 a 和 b)的所有值的区间。a 的值不能超过 b。 ...闭区间运算符在迭代一个区间的所有值时是非常有用的,如在 for-in 循环中: for index in 1...5 { print("\(index) * 5 = \(index * 5)")...} // 1 * 5 = 5 // 2 * 5 = 10 // 3 * 5 = 15 // 4 * 5 = 20 // 5 * 5 = 25 半开区间运算符 半开区间运算符(a..
基本运算符 Swift支持大部分的标准C语言的操作符,而且做了一些改进,以帮助开发人员少犯低级错误,比方: 本该使用==的时候,少写了个=, if x == y {…} 写成了 if...和 … 接下来,我们就来看看Swift中的使用方法 术语(原文中专门列出来) 什么是一元运算符,二元运算符,三目执行符,这里我就不列了。...Swift提供了,能够溢出的运算符: &- 这个先不细说。在最后的章节里,有讲溢出规则的时候再说吧 运算符+同一时候也支持字符串的连接。...Swift还提供了两个新的比較运算符 === 和 !=== 用于推断两个引用是否指向了同一个对象,这个到类和结构体的章节会有样例 三目运算符( ?...if question { answer1 } else { answer2 } 范围执行符(这样译我认为不合适,更应该叫自己主动扩展
CGAffineTransform(translationX: 2, y: 0)) 这就可以让视图往左变换了,往右就是-2咯,改Y就是上下呗 抖动,抖动肯定是有次数的,我们根据次数来移动视图,每次调用自身扩展修改方向...具体代码我就粘在下面咯,反正也没多少行 // // UIView+ZHYShake.swift // UIViewShake // // Created by ZHY on 2017/8/16....ZHYShakeDirection: Int { case horizontal case vertical } extension UIView { /// ZHY 扩展
so,使用这个扩展也是可以的 // // UIView+ZHYShake.swift // UIViewShake // // Created by ZHY on 2017/8/16. // Copyright...public enum ZHYShakeDirection: Int { case horizontal case vertical } extension UIView { /// ZHY 扩展...() }) } } 说实话啥,第一种扩展还是比较好理解也比较好写的。。。
2.数学运算符 Swift提供四个标准数学运算符支持多有的数字类型。...复合赋值运算 Swift也提供了复合赋值运算。用来结合赋值运算符和其它的运算符。...3.比較运算符 Swift支持C全部的比較运算符,比較相等。比較不相等,大于,小于。大于等于,小于等于 NOTE Swift还提供了两个身份比較运算符===和。...5.范围运算符 Swift提供两种范围运算符,用来表示数值范围 闭区间范围运算符 闭区间范围运算符(a…b)定义了从a到b得范围,而且包括a和b。...6.逻辑运算符 逻辑运算符能够改动或者结合逻辑值true和false。Swift支持三种标准的逻辑操作符 非(。)
一:赋值运算符 赋值运算 a = b, 表示用 b 的值来初始化或更新 a 的值。...二:复合赋值 如同强大的 C 语言, Swift 也提供把其他运算符和赋值运算 = 组合的复合赋值运算符, 加赋运算 += 是其中一个例子: var m = 1 m += 2 // m 现在是 3 表达式...这不同于上面提到的自增 和自减运算符....系列文章推荐阅读 Swift 基础之控制流 Swift 基础之常量和变量 Swift 基础之整数和浮点数 Swift 基础之类型 Swift 基础之布尔值和元组 Swift 基础之可选 Swift 基础之断言...Swift 基本运算符之数值运算
Swift 提供了两个方便表达一个区间的值的运算符。 一:闭区间 闭区间运算符 a...b 定义一个包含从 a 到 b (包括 a 和 b)的所有值的区间....闭区间运算符在迭代一个区间的所有值时是非常有用的, 如在 for-in 循环中: for index in 1...5 { print("\(index) * 5 = \(index * 5)"...系列文章推荐阅读 Swift 基础之控制流 Swift 基础之常量和变量 Swift 基础之整数和浮点数 Swift 基础之类型 Swift 基础之布尔值和元组 Swift 基础之可选 Swift 基础之断言...Swift 基本运算符之数值运算 Swift 基本运算符之赋值 Swift 比较运算和三目条件运算
Swift 支持基于 C 语言的三个标准逻辑运算。 逻辑非 !a 逻辑与 a&&b 逻辑或 a||b 一:逻辑非 逻辑非运算 !...它是一个前置运算符,需出现在操作数之前,且不加空格。读作 非 a,然后我们看以下例子: let allowedEntry = false if !...} else { print("ACCESS DENIED") } // 输出 "ACCESS DENIED" 三:逻辑或 逻辑或 a || b 是一个由两个连续的 | 组成的中置运算符。...四:组合逻辑 我们可以组合多个逻辑运算来表达一个复合逻辑: if enteredDoorCode && passedRetinaScan || hasDoorKey || konwsOverridePassword
赋值和算数运算符 1,Swift中的赋值运算符(=)不会返回值。 而在OC中,赋值运算符(=)是有返回值的。...return lostNum } print(findLostNum(nums: [1,3,4,2,3,2,4])) // 1 举例5:消失的数字(续) 现在我们对上面的举例4做一个扩展...y: -vector.y) } } let positive = Vector2D(x: 3.0, y: 1.0) let negative = -positive // (-3, -1) 组合赋值运算符重载...组合赋值运算符将赋值运算符(=)与其他计算运算符(+、-、*、/、%)进行结合。...,Swift为以下自定义类型自动提供等价运算符合成实现: 遵循Equatable协议且只拥有存储属性的结构体 遵循Equatable协议且只拥有关联类型的枚举 没有关联类型的枚举 自定义运算符 在Swift
本次的教程是基于Swift5.1版本 Swift 支持 C 中的大多数标准运算符,有过C语言基础或者其他语言基础的都不陌生了,这里就不做过多的阐述了。...这章说点不一样的东西,Swift 提供了两种 C 中没有的区间运算符( a..运算符 Swift 包含了两个 区间运算符 ,他们是表示一个范围的值的便捷方式。 闭区间运算符 闭区间运算符( a…b )定义了从 a 到 b 的一组范围,并且包含 a 和 b 。...例如: for value in 1...5 { print(value) } 输出 1 2 3 4 5 半开区间运算符 半开区间运算符( a..运算符一侧的值。因为运算符只有一侧有值,所以这种区间叫做单侧区间。
扩展 为现有的类、结构体、枚举类型、或协议添加了新功能。扩展和 Objective-C 中的分类类似。...扩展可以向已有的类型添加计算实例属性和计算类型属性。...扩展可以为已有的类型添加新的实例方法和类型方法。...} 扩展异变实例方法 增加了扩展的实例方法仍可以修改(或异变)实例本身 extension Int { mutating func square() { self = self...* self } } var someInt = 3 someInt.square() 扩展协议 协议可以通过扩展来提供方法和属性的实现以遵循类型。
Swift专题讲解二十——扩展 一、简介 Swift中的扩展与Objective-C中的类别功能相似,扩展可以为一个已有的类、结构体、枚举或者协议添加新的属性或方法,与Objective-C...的类别不同的是,Swift中的扩展没有名称。 ...Swift中的扩展支持如下功能: 1.添加计算属性 2.定义实例方法和类型方法 3.定义新的构造方法 4.定义下标方法 5.定义嵌套类型 6.使一个已有的类遵守协议 7.对协议进行扩展添加新的方法 二、...使用扩展添加计算属性 使用extension来声明扩展,示例代码如下: //创建一个类 有两个属性 class MyClass { var name:String var...age:Int init(){ name = "HS" age = 24 } } //为MyClass类扩展一个计算属性 extension MyClass
领取专属 10元无门槛券
手把手带您无忧上云