【问题标题】:Modify strings with reflection用反射修改字符串
【发布时间】:2015-09-17 13:08:31
【问题描述】:

我正在阅读this问题/答案,它基本上显示了Java和字符串中的一个有趣行为,我想到了两个问题:

  1. Objective-C/Swift String 的行为是否相同?我的意思是,例如,如果我有两个变量在内部存储相同的文字 "someString",它们会引用一个 "someString" 对象吗?我在文档中没有找到任何关于它的信息。
  2. 如果我上一个问题的答案是肯定的,那么是否可以像在 Java 中那样更改相同的字符串文字?

【问题讨论】:

  • 您是否尝试过测试问题 1?写一些代码,看看你会得到什么。
  • @rmaddy 关于 Swift,我做到了,但是,MirrorType (swiftdoc.org/protocol/MirrorType) 协议仅声明 { get } 属性,所以即使我得到了值,我也无法修改它。在 Obj-C 中,我能得到的最接近的是 object_setInstanceVariable,但我不知道字符串是如何存储在 NSString 中的,所以这也是一个死胡同。

标签: objective-c string swift reflection


【解决方案1】:
  1. 由于编译单元的原因,并非所有 NSString 文字 (@"string literal") 共享相同的存储空间。
  2. NSString 文字不能在程序代码中更改,它们被编译成只读段。
  3. NSString 变量,即在运行时创建的变量,只能通过赋值共享。
  4. NSString 实例是不可变的,创建后无法更改。
  5. NSMutableString 实例可以修改,所有指向此类实例的变量都指向相同的更改。

Swift 略有不同,正如@Grimxn 指出的那样,Swift String 不是一个类,不变性由声明语法决定:letvar

【讨论】:

  • 值得指出(完成 OP 的问题)Swift String 甚至不是一个类...
猜你喜欢
  • 1970-01-01
  • 2013-05-11
  • 2022-01-06
  • 2017-11-04
  • 1970-01-01
  • 2017-09-26
  • 2014-05-30
  • 2018-04-10
  • 2021-10-22
相关资源
最近更新 更多