如何将属性添加到字符串以返回两个值,字符串本身和另一个字符串(set 和 get)



如何向字符串添加属性以返回两个值,字符串本身和另一个字符串(set和get(?或剂量字符串有一些属性返回一个字符串,我可以设置一个新值?

我想要实现的目标如下:

var myString = "123"
func addFunc(s: String) -> String {
    myString.property = "resultString"
    return myString.property
}
let result = myString.addFunc(s: myString)

首先,要明确一点:不可能使用其他存储属性扩展结构或类。

对于类,可以使用目标 c 运行时功能(如关联对象(来解决此问题。如果您搜索objc_setAssociatedObject和/或objc_getAssociatedObject,您会发现很多

对于结构(在您的情况下,String 是结构(,不支持这样做,因为它们一直在移动和复制,因此它们迟早会失去与其关联值的关系。

您可以使用结构来执行所需的操作。

struct MyString {
  var myString: String
  var property: String
}

您可以根据需要创建吸气器和二传手。

编辑:

可以对您想要的内容进行扩展,但我强烈建议不要这样做。在您的情况下更改 String 的实现不是一件好事。

最好有一个结构。

我不确定你在计划什么,但你可以尝试使用Tuple类型的扩展变量。这样:

extension String {
    var myProperty2: (String, String) {
        get {
            return (self, "something you want")
        } set { }
    }
}

用法:

var hello = "Hello!"
hello.myProperty2 = (hello, "Hi!")
print(hello.myProperty2)

最新更新