15.2 Swift字符串的拷贝

前端之家收集整理的这篇文章主要介绍了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也改变了,是浅拷贝。

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

*/

猜你在找的Swift相关文章