GVKun编程网logo

嵌套数组上的Swift相等运算符(数组嵌套对象)

15

对于嵌套数组上的Swift相等运算符感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍数组嵌套对象,并为您提供关于2.12Swift的一元、二元和三元运算符[Swift原创教程]、2.13Swif

对于嵌套数组上的Swift相等运算符感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍数组嵌套对象,并为您提供关于2.12 Swift的一元、二元和三元运算符 [Swift原创教程]、2.13 Swift的位运算符和防溢出运算符 [Swift原创教程]、2.14 比较运算符和区间运算符 [Swift原创教程]、8.8 Swift恒等运算符的有用信息。

本文目录一览:

嵌套数组上的Swift相等运算符(数组嵌套对象)

嵌套数组上的Swift相等运算符(数组嵌套对象)

为什么最后一个语句无法编译为错误:Binary operator ''=='' cannot be applied to two ''[[Simple]]’operands,并且有一种方法可以修改Simple结构或扩展==运算符以对嵌套数组(或字典)执行相等性检查?

var i1: [Int] = [1]var i2: [Int] = [1]i1 == i2 // -> truevar i3: [[Int]] = [[1], [2]]var i4: [[Int]] = [[1], [2]]i3 == i4 // -> truestruct Simple: Equatable, Hashable {    let message: String    var hashValue: Int {        return message.hashValue    }}func ==(lhs: Simple, rhs: Simple) -> Bool {    return lhs.message == rhs.message}var a: [Simple] = [Simple(message: "a")]var b: [Simple] = [Simple(message: "a")]a == b // -> truevar x: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]var y: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]x == y // -> ERROR! Binary operator ''=='' cannot be applied to two ''[[Simple]]’ operands

答案1

小编典典

更新: 条件一致性已在 Swift 4.1中 实现 特别是:

现在,标准库类型Optional,Array和Dictionary的元素类型符合Equatable时,它们便符合Equatable协议。…

(来自Swift
CHANGELOG)。

现在可以任意嵌套Equatable元素数组,Equatable并且可以与进行比较==。您的密码

var x: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]var y: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]x == y

如果Simple为,则在Xcode 9.3中编译Equatable


(旧答案:)
其原因与为什么未为可选数组定义Equatable相似。如果元素类型为,则可以 数组进行 比较
==``Equatable

/// Returns true if these arrays contain the same elements.public func ==<Element : Equatable>(lhs: [Element], rhs: [Element]) -> Bool

这就是为什么

var a: [Simple] = [Simple(message: "a")]var b: [Simple] = [Simple(message: "a")]a == b // -> true

编译。

但即使是equatable类型TArray<T> 不符合
Equatable协议,比较为什么我不能做阵列符合Equatable?。因此,在

var x: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]var y: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]x == y // -> ERROR! Binary operator ''=='' cannot be applied to two ''[[Simple]]’ operands

xy与元素类型阵列[Simple],其不会 符合Equatable协议,并且不存在匹配的==运算符。

您可以==为简单的嵌套数组定义通用运算符,如下所示:

func ==<Element : Equatable> (lhs: [[Element]], rhs: [[Element]]) -> Bool {    return lhs.count == rhs.count && !zip(lhs, rhs).contains {$0 != $1 }}

或更简单(如@kennytm所建议):

func ==<Element : Equatable> (lhs: [[Element]], rhs: [[Element]]) -> Bool {    return lhs.elementsEqual(rhs, by: ==)}

这样可以进行x == y编译并按预期工作。目前,似乎没有办法==在任意嵌套的数组上定义运算符。

2.12 Swift的一元、二元和三元运算符 [Swift原创教程]

2.12 Swift的一元、二元和三元运算符 [Swift原创教程]

原文:http://www.coolketang.com/staticCoding/5a9924259f54542163e2dc9d.html

1. 本节课将介绍开发语言的常用的操作符。操作符可以分为一元操作符、二元操作符和三元操作符。



2. 使用赋值运算符等号,可以给常量或变量进行初始化。它属于二元运算符。
3. 负号为一元运算符,一元运算符用于操作一个对象。
4. 加号为一元运算符,一般会省略该符号。
5. 初始化一个布尔类型的常量,并设置它的值为假。
6. 使用感叹号,可以对布尔值进行反转。
7. 自增和自减运算符不再被支持。
8. 使用加号和等号的复合运算符,替换原来的自增运算符。
9. 其它的复合运算符,还有自减、自乘和自除以。
10. 算术运算符属于二元运算符。
11. 算术运算符除了加、减、乘、除之外,还有求余运算符。
12. 可以使用浮点数值进行求余,不过无法直接使用求余运算符。
13. 而是使用系统提供的内部方法,使用指定的除数进行求余。
14. 加号运算符还可以使用在两个字符串之间,表示拼接两个字符串。
15. 在两个数组之间使用加号,可以将两个数组,合成一个数组。
16. 接着演示三元运算符的使用,用来获得两个数字之中的最大值。首先定义两个常量和一个变量。
17. 通常使用判断语句,进行数字大小的判断。
18. 将较大的数字,赋予结果变量。
19. 使用三元条件操作符,进行此类的操作会更加快捷。三元条件操作符的形式是:判断式 ? 结果1 : 结果2。如果判断式为真,则返回结果1,否则返回结果2。
本文整理自:《Swift4互动教程》,真正的 [手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载: https://itunes.apple.com/cn/app/id1320746678 ,或扫描本页底部的二维码。课程配套素材下载地址: 资料下载

2.13 Swift的位运算符和防溢出运算符 [Swift原创教程]

2.13 Swift的位运算符和防溢出运算符 [Swift原创教程]

原文:http://www.coolketang.com/staticCoding/5a99242517d0090035985c31.html

1. 本节课将为你演示,位运算符的使用。位运算符在各种语言中都存在,主要包含取反、与、或、异或等运算。



2. 首先定义一个无符号的整型常量,并设置其值为二进制的格式。
3. 对二进制数据进行取反运算,并观察右侧实时反馈区显示的结果。
4. 接着定义另外两个二进制格式的常量。
5. 通过[与]运算符,对两个二进制数值,按位进行与运算。
6. 对两个二进制数值,按位进行异或运算。
7. 定义另一个无符号的整型常量。
8. 通过左移运算符,将整数的二进制数值左移两位,使整数的值放大到4倍。
9. 通过左移运算符,将整数的值放大到16倍。
10. 通过右移运算符,将整数的二进制数值右移两位,将整数的值缩小至四分之一。
11. 接着演示溢出运算符的使用,首先获得16位整数的最大值。
12. 将拥有最大值的变量增加2,此时出现溢出的错误提示。
13. 然后将加号运算符,修改为溢出运算符,此时变量的值,将被约束为一个合理的值。
14. 位运算符可以直接应用在整数上,首先定义一个整型常量。
15. 最后使用[与]运算符,对两个整数进行[与]运算。尝试更改常量x的值,并观察右侧实时反馈区结果的变化。
本文整理自:《Swift4互动教程》,真正的 [手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载: https://itunes.apple.com/cn/app/id1320746678 ,或扫描本页底部的二维码。课程配套素材下载地址: 资料下载

2.14 比较运算符和区间运算符 [Swift原创教程]

2.14 比较运算符和区间运算符 [Swift原创教程]

原文:http://www.coolketang.com/staticCoding/5a9924259f54540af9a27d21.html

1. 本节课将为你演示关系运算符和区间运算符。



2. 双等号运算符,用于检查两个操作数的值是否相等,如果相等则值为真。
3. 判断两个操作数的值是否不等,如果不等则值为真。
4. 使用大于号和小于号,可以判断两个操作数的大小。
5. 使用大于等于号和小于等于号,可以对两个操作数的大小以及是否相等进行判断。
6. 接着演示区间运算符的使用,区间运算符通常和循环语句进行配合使用。半闭区间运算符a..<b表示一个从a开始,但不包括b的区间。点击右侧的显示结果图标,查看输出的内容。


7. 在列表中点击鼠标右键,打开选项菜单。


8. 选择菜单中的查看历史值选项。


9. 从结果列表可以看出,共执行了四次循环语句。再次点击右侧的显示结果图标,隐藏输出的内容。


10. 继续编写代码,演示闭区间运算符的使用。


11. 闭区间运算符(a...b),定义一个包括a和b的所有值的区间。点击底部的显示调试区图标,打开底部的控制台,观察循环语句输出的结果。


12. 从输出的内容可以看出,使用闭区间运算符的循环语句,共输出了5次内容。再次点击底部的显示调试区图标,隐藏底部的控制台。


13. 继续编写代码,演示逻辑运算符的使用。


14. 首先声明两个布尔常量,一个值为真,另一个值为假。


15. 使用逻辑与运算符&&,当两个值都为真时,返回的结果为真。


16. 使用逻辑或运算符||,只要两个值中的一个为真,返回的结果为真。


17. 最后将逻辑与、逻辑或和小括号配合使用,以进行更加复杂的逻辑运算,并观察和体会右侧实时反馈区显示的结果。


本文整理自:《Swift4互动教程》,真正的 [手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载: https://itunes.apple.com/cn/app/id1320746678 ,或扫描本页底部的二维码。课程配套素材下载地址: 资料下载

8.8 Swift恒等运算符

8.8 Swift恒等运算符

/**

恒等运算符

*/

class Rect {

// 结构体成员变量

var width: Double = 5.0

var height: Double = 6.0

// 结构体的成员方法,可以访问使用成员属性。

func getWidth() -> Double {

return width

}

func show() -> Void {

print("width\(width)")

}

}

var rect1: Rect = Rect()

var rect2: Rect = rect1

print("---------------->")

print("rect1.width==\(rect1.width)")

print("rect1.height==\(rect1.height)")

// 改变rect1 的宽度

rect1.width = 100.0

print("rect2.width==\(rect2.width)")

print("rect2.height==\(rect2.height)")

/**

我们可以看到

rect1 赋给 rect2 后,改变 rect1的宽度,那么 rect2的宽度也改变了。

说明是让rect2指向rect1 也就是它们两个指向同一个实例。

说明类是引用类型

*/

/**

类的实例出现这种赋值操作的时候,比如将rect1 赋给 rect2

这个是引用,不会拷贝一块新的内存;

rect2 rect1 实际上指向同一个实例,称之为同一个实例的两个引用。

那么如果有多个变量或常量指向同一个类的实例的时候,那么我们怎么

判断这多个常量 变量是否指向同一个实例呢?

如何判断 rect2 rect1 指向同一个实例呢?

Swift提供了一个恒等于 运算符

*/

/**

关系运算符 == !=

判断两个对象是否指向同一个类的实例的。

===

!==

*/

if rect1 === rect2 {

print("equal")

}

if rect1 !== rect2 {

print("Not equal")

}

/**

特别注意的是,

只能用于类的实例

不能用于结构体

*/

关于嵌套数组上的Swift相等运算符数组嵌套对象的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于2.12 Swift的一元、二元和三元运算符 [Swift原创教程]、2.13 Swift的位运算符和防溢出运算符 [Swift原创教程]、2.14 比较运算符和区间运算符 [Swift原创教程]、8.8 Swift恒等运算符等相关知识的信息别忘了在本站进行查找喔。

本文标签: