加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

15.2 Swift字符串的拷贝

发布时间:2020-12-14 06:31:01 所属栏目:百科 来源:网络整理
导读:/** ( 2 )字符串拷贝 */ var swiftStr: String = "Hello" var swiftStr1: String = swiftStr /** public struct String { /// Creates an empty string. public init() 我们点击安住 Command 点击 String 可以看到是 结构体类型,值类型 值类型的赋值操作

/**

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也改变了,是浅拷贝。

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

*/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读