15.2 Swift字符串的拷贝

/**

2)字符串拷贝

*/

var swiftStr: String = "Hello"

var swiftStr1: String = swiftStr

/**

public struct String {

/// Creates an empty string.

public init()


我们点击安住Command 点击String可以看到是 结构体类型,值类型

值类型的赋值操作是深拷贝,

所有这个字符串的这种操作都是深拷贝。

*/

/**

我们可以验证一下上面的赋值操作是否是深拷贝

*/

// 改变 swiftStr1

swiftStr1 += " World"

print("swiftStr==\(swiftStr)")

print("swiftStr1==\(swiftStr1)")

/**

swiftStr==Hello

swiftStr1==Hello World

*/

/**

我们可以看到改变swiftStr1后,swiftStr并没有被改变啊。

所以上面是深拷贝。

*/

print("swiftStr.Address==\(Unmanaged<AnyObject>.passUnretained(swiftStr as AnyObject).toOpaque())")

print("swiftStr1.Address==\(Unmanaged<AnyObject>.passUnretained(swiftStr1 as AnyObject).toOpaque())")


/**

打印出来的地址也不一样啊,所以是深拷贝。

swiftStr.Address==0x0000608000051e20

swiftStr1.Address==0x0000608000051f40

*/

var ocStr: NSMutableString = NSMutableString.init(string: "balabala")

/**

按住Command 点击NSMutableString,进入

open class NSMutableString : Nsstring {

/* NSMutableString primitive (funnel) method. See below for the other mutation methods.

*/

open func replaceCharacters(in range: NSRange,with aString: String)

}


可以看到的是 class类型,是引用类型,所以是浅拷贝。

*/

var ocStr1 = ocStr

// 改变ocStr1

ocStr1.insert("World",at: ocStr.length)

print("ocStr==\(ocStr)")

print("ocStr1==\(ocStr1)")

/**

ocStr==balabalaWorld

ocStr1==balabalaWorld

改变ocStr1后,ocStr也改变了,是浅拷贝。

这些都是系统来替我们做的,程序员不需要做

*/

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...