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也改变了,是浅拷贝。 这些都是系统来替我们做的,程序员不需要做。 */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |