相关疑难解决方法(0)

Swift"可变"字符串真的可变,还是像Java字符串一样?

Swift编程语言中,在字符串部分String Mutability一节中,它说:

String可以通过将特定分配给变量(在这种情况下可以修改)或常量(在这种情况下不能修改)来指示特定是否可以修改(或变异):

并给出示例代码:

var variableString = "Horse"
variableString += " and carriage"
// variableString is now "Horse and carriage"

let constantString = "Highlander"
constantString += " and another Highlander"
// this reports a compile-time error - a constant string cannot be modified”
Run Code Online (Sandbox Code Playgroud)

这本书中的iBooks 这里,或在Web浏览器在这里.

在下一段中,它声称"字符串是值类型".

我的问题:对我来说,这看起来不像是一个可变的字符串.它看起来像我在Java(或C#,Python和其他)中习惯的:具有可变变量绑定的不可变字符串对象.换句话说,有一个对象"Horse",然后它创建了一个新的String对象"Horse and carriage"并将其设置为相同的变量.而且由于无法区分对不可变对象的引用与值类型(对吗?)之间的区别,我想知道:为什么他们这样描述它?这些Swift字符串与它在Java中的方式有​​什么区别吗?(或C#,Python,Objective-C/NSString)

string immutability swift

18
推荐指数
2
解决办法
1万
查看次数

String类型是类还是结构?或者是其他东西?

class MyString: String {}
Run Code Online (Sandbox Code Playgroud)

给出错误:

从非协议,非类型'String'继承.

所以看起来String不是一个阶级.但为什么它可以用于AnyObject预期的上下文?我虽然AnyObject只是类类型,但Any可以是类或非类类型.

swift

14
推荐指数
1
解决办法
6034
查看次数

Swift,Strings和Memory地址

有一些我不了解Swift如何管理内存地址 String(s)

1.参考类型

这里fooboo是2个指针指向相同的内存位置.

class Foo { }

let foo = Foo()
let boo = foo

unsafeAddressOf(foo) // "UnsafePointer(0x7FCD13719BE0)"
unsafeAddressOf(boo) // "UnsafePointer(0x7FCD13719BE0)" 
Run Code Online (Sandbox Code Playgroud)

好.

2.价值类型

let word0 = "hello"
let word1 = word0
Run Code Online (Sandbox Code Playgroud)

现在,word0word1value types但这里的copy on write机制是参与.

[...]但是,当绝对必要时,Swift仅在幕后执行实际复制.Swift管理所有值复制以确保最佳性能,您不应该避免分配以尝试抢占此优化.https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_134

那他们为什么有2个不同的内存地址呢?

unsafeAddressOf(word0) // "UnsafePointer(0x7FCD1342ACE0)"
unsafeAddressOf(word1) // "UnsafePointer(0x7FCD13414260)"
Run Code Online (Sandbox Code Playgroud)

3.更多

同时请注意,Stringstruct那个莫名其妙符合AnyObject.

使用Xcode 7 GM Playground和Swift 2.0进行测试.

string value-type memory-address swift

12
推荐指数
1
解决办法
4425
查看次数

标签 统计

swift ×3

string ×2

immutability ×1

memory-address ×1

value-type ×1