Swift“可变”字符串是否可变,或者它们是否像Java字符串一样?

Swift“可变”字符串是否可变,或者它们是否像Java字符串一样?,第1张

概述在 Swift编程语言中,在Strings部分字符串Mutability中,它说: You indicate whether a particular String can be modified (or mutated) by assigning it to a variable (in which case it can be modified), or to a constant (in w 在 Swift编程语言中,在Strings部分字符串Mutability中,它说:

You indicate whether a particular String can be modifIEd (or mutated) by assigning it to a variable (in which case it can be modifIEd),or to a constant (in which case it cannot be modifIEd):

并给出示例代码:

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”

这本书在iBooks here中,或在网络浏览器here中.

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

我的问题:这看起来不像我可变的字符串.它看起来像我在Java(或C#,Python和其他)中常用的:具有可变变量绑定的不可变字符串对象.换句话说,有一个对象“马”,然后创建一个新的String对象“马和马车”,并将其设置为相同的变量.而且由于没有办法说明对不可变对象的引用与值类型之间的区别(对吗?),我想知道为什么它们这样描述?这些Swift字符串和Java之间有什么区别吗? (或C#,Python,Objective-C / Nsstring)

以某种方式,在谈论参考类型时,“可变”和“不可变”才有意义.如果您尝试将其扩展为值类型,则所有值类型可以被视为与“不可变”引用类型的功能相同.

例如,考虑一个类型为Int的var.这是可变的吗?有些人可能会说,可以通过分配(=)来更改其可见的“值”.但是,NSNumber和Nsstring的变量也可以相同 – 您可以通过分配给它来更改其可见值.但NSNumber和Nsstring被描述为不可变类.

引用类型真正发生的是分配给它们会导致变量(指针)指向一个新的对象.旧的和新的对象本身都不会“改变”,但由于它指向一个不同的对象,所以你“看到”一个新的值.

当我们说一个类是“可变的”时,我们的意思是它提供了一个API(方法或参考)来实际改变对象的内容.但是我们怎么知道对象已经改变了? (而是它是一个新对象?)这是因为我们可以对同一个对象有另一个引用,并且通过一个引用对对象的更改可以通过另一个引用来看到.但这些属性(指向不同对象,具有多个指向同一对象的指针)本质上仅适用于引用类型.根据定义,值类型不能具有这样的“共享”(除非“值”的一部分是Array中的引用类型),因此,值类型不会发生“可变性”的后果.

所以,如果你做一个包含整数的不变类,它将在 *** 作上等价于Int – 在这两种情况下,更改变量值的唯一方法是将(=)赋值给它.所以,Int也应该被认为是“不变的”.

Swift中的值类型稍微复杂一点,因为它们可以有方法,其中一些可以是变异的.所以如果你可以调用一个值类型的变异方法,它是可变的吗?但是,如果我们考虑将值类型的变异方法称为语法糖,为其分配一个全新的值(无论使用哪种方法将其变异),我们都可以克服这一点.

总结

以上是内存溢出为你收集整理的Swift“可变”字符串是否可变,或者它们是否像Java字符串一样?全部内容,希望文章能够帮你解决Swift“可变”字符串是否可变,或者它们是否像Java字符串一样?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1041293.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存