gpt4 book ai didi

swift - Swift 中的值类型和引用类型

转载 作者:搜寻专家 更新时间:2023-10-31 21:59:09 25 4
gpt4 key购买 nike

根据苹果文档,String 是 Struct(值类型),NSString 是 Class(引用类型)。引用类型意味着如果我们更改引用的值,它也会反射(reflect)在原始值中。检查下面的代码。

谁能解释一下下面代码的输出是什么以及为什么?

import UIKit

var str:NSString = "Hello, playground"

var newStr = str

newStr = "hello"

print(str)
print(newStr)

根据我的说法,str 和 newStr 都应该打印 hello,因为它们是引用类型,但输出是

Hello, playground

hello

最佳答案

首先,NSString 是不可变的,所以虽然是引用类型,但不能改变。

现在,当您说 var str:NSString = "Hello, playground" 时,您将 str 设置为对常量字符串“Hello, playground”的引用。

然后您有 var newStr = str,因此 newStrstr 都将引用相同的常量字符串。

最后你有了 newStr = "hello",所以 newStr 现在指的是一个不同的常量字符串。您从未修改过原始常量字符串“Hello, playground”,事实上您也不能,因为它既是常量又是不可变类。

但是,如果您使用 NSMutableString 并写入:

var str:NSMutableString = NSMutableString(string:"Hello, playground")

var newStr = str

newStr.append(". Hello")

print(str)
print(newStr)

然后你会得到输出

Hello, playground. Hello

Hello, playground. Hello

因为您正在修改被两个变量引用的一个对象。

关于swift - Swift 中的值类型和引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44195908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com