首页 > 其他分享 >Swift 的 恒等(===)和不恒等(!==)

Swift 的 恒等(===)和不恒等(!==)

时间:2024-10-12 18:33:32浏览次数:8  
标签:name reference 对象 person2 person3 person1 Swift 恒等

Swift 提供了两个运算符 === 和 !==,用于判断两个对象是否引用同一个对象实例。

这是用来比较引用类型(例如类实例)的操作符,而不是用来比较值类型(如结构体、枚举、基本数据类型)。

  • ===:判断两个引用是否指向同一个对象(引用同一块内存地址)。
  • !==:判断两个引用是否指向不同的对象。
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

let person1 = Person(name: "Alice")
let person2 = person1   // person2 和 person1 引用的是同一个对象
let person3 = Person(name: "Alice")  // person3 是一个新的对象实例

if person1 === person2 {
    print("person1 and person2 reference the same instance")
} else {
    print("person1 and person2 reference different instances")
}

if person1 !== person3 {
    print("person1 and person3 reference different instances")
}

输出

person1 and person2 reference the same instance
person1 and person3 reference different instances

在这个例子中,person1 和 person2 引用的是同一个 Person 对象,因此 person1 === person2 结果为 true。而 person1 和 person3 虽然它们的内容相同,但它们是两个不同的对象实例,因此 person1 !== person3 结果为 true

总结:

  • === 和 !== 比较的是引用,用于判断两个对象是否是同一个对象实例。
  • 这与值类型的比较(使用 == 和 !=)不同,值类型比较的是它们的内容。

 

标签:name,reference,对象,person2,person3,person1,Swift,恒等
From: https://www.cnblogs.com/someonelikeyou/p/18461172

相关文章

  • SwiftUI 调用相机扫码
    在SwiftUI中调用相机进行扫码(二维码、条形码等),可以通过使用AVCaptureSession和AVCaptureMetadataOutput实现。这可以通过UIViewControllerRepresentable来包装AVCaptureSession,然后与SwiftUI结合。详见代码示例。调用流程创建一个使用AVCaptureSession来处理相......
  • 探索 Swift 中的 withUnsafeBufferPointer 与 Copy-On-Write 机制
    在Swift编程中,对内存管理和性能优化的理解是提高应用效率的关键。今天,我们将深入探讨两个重要主题:使用 withUnsafeBufferPointer 来访问数组的内存地址,以及Swift集合类型(如Array、Dictionary和Set)所采用的Copy-On-Write(COW)机制。withUnsafeBufferPointer 简介with......
  • SwiftUI简明概念(2):renderingMode VS symbolRenderingMode
    一、什么是renderingModeImage的renderingMode可以设置两种值,.original表示渲染图片原来的像素,.template则表示用前景色去渲染图片像素非透明部分,图片只用作形状或者模版。二、什么是symbolRenderingModeImage的symbolRenderingMode可以设置四种值。我们知道SFsymbol可能是......
  • SwiftUI简明概念(1):ForegroundColor VS ForegroundStyle
    一、何谓前景色在SwiftUI体系内,一个View可能包含一个或多个图层,那么最前面的一个图层就是ForegroundColor或ForegroundStyle作用的目标图层。当然这个图层可能不会响应前景色的要求:如上图所示,Rectangle作为shape图层,能响应前景色要求,导致图层变成前景色。Button的作用图层是......
  • Swift查看变量内存地址
    withUnsafePointer不说话,先放代码withUnsafeBufferPointer(to:a){pointinletaddress=UnsafeRawPointer(point)letaddressInt=Int(bitPattern:address)print("\(addressInt)")}验证copyonwrite值......
  • Swift解析json三种方式
    在Swift中解析本地JSON文件有多种形式,以下是其中几种常用的方式:使用Codable协议:使用Codable协议是Swift中解析JSON的推荐方式。首先,你需要定义一个对应的数据模型,该模型需要符合Codable协议。然后使用JSONDecoder对象将JSON数据解析为对应的数据模型对象。......
  • openstack-swift
    对象存储swift对象存储是一种用于存储和管理大量数据的系统。类似于一个超大云盘。可以存储各种文件。(照片,视频,文档等等)。与传统的文件存储不同,对下个存储不关心文件的目录结构和层级关系,而是将每个文件视为一个独立的对象(Object).每个对象都有一个唯一的标识符,我们可以通过这......
  • SwiftData 共享数据库在 App 中的改变无法被 Widgets 感知的原因和解决
    0.问题现象我们watchOS中的App和Widgets共享同一个SwiftData底层数据库,但是在App中对数据库所做的更改并不能被Widgets所感知。换句话说,App更新了数据但在Widgets中却看不到。如上图所示:我们的App在切换至后台之前会随机更新当前的驻场英雄,而驻场英雄......
  • SwiftUI里的ForEach使用的注意事项
    在用Swift编程语言的SwiftUI包设计苹果设备的程序时,经常会用到ForEach函数。这个函数的作用是将一个数据集里面的内容一条一条地取出,罗列在程序的页面上,使用方式的详解见[1]。但ForEach和一般的循环不同之处在于它要求输入里面的数据集里元素必须是Identifiable的,否则不可使用......
  • Swift里的数值变量的最大值和最小值
    Swift里有很多种数值变量,如Int,Int8,Float,Double等。和绝大多数编程语言一样,由于是在计算机上运行,内存有限,所以必有最大值和最小值,而计算机无法处理超过该值的数。在Swift中,数字变量类型都有一些静态属性,其固定值为该类变量的最大值和最小值。一、整数型变量(一)如何找到最大值......