String 在Swift中存储指针

String 在Swift中存储指针,string,swift,pointers,String,Swift,Pointers,我的类字段的初始值设定项接收一个inout字符串 class Field: NSObject { var placeHolder: String? var text: String? init(placeHolder : String, inout text: String) { self.placeHolder = placeHolder self.text = &text } } 我希望能够存储文本变量指针,以便以后更改其值。这

我的类
字段的初始值设定项
接收一个inout字符串

class Field: NSObject {

   var placeHolder: String?
   var text: String?

   init(placeHolder : String, inout text: String) {
      self.placeHolder = placeHolder
      self.text = &text
   }

}

我希望能够存储
文本
变量指针,以便以后更改其值。这样做的最佳方式是什么?

想到的是使用
NSMutableString
而不是Swift
String
,因为
NSMutableString
是一个类,因此通过引用传递

编辑:尝试在操场上搞乱以下内容

import Foundation

class Field: NSObject {

    var placeHolder: String?
    var text: NSMutableString?

    init(placeHolder : String, text: NSMutableString) {
        self.placeHolder = placeHolder
        self.text = text
        super.init()
    }

    func mutateIt() {
        text?.appendString("mutated")
    }
}

var mutStr = NSMutableString(string: "Hello")
mutStr.appendString("Why")

var aField = Field(placeHolder: "", text: mutStr)
aField.mutateIt()

println(mutStr)

我想你应该检查一下如何使用协议。我以前没有看到任何人像这样使用
inout
关键字。通常,它们在方法中使用它来修改同一范围内传入的参数,而不是初始值设定项。现在,你已经超过了班级水平,我对此不确定。此外,如果您使用协议,可读性将得到提高

您试图做的事情将非常危险。你怎么能保证你的“字符串指针”以后会指向任何东西?考虑这个代码:

func stringChanger(inout s : String) {
}
func f() {
    var s = "howdy"
    stringChanger(&s)
}
如果
stringChanger
可以存储一个指向
s
的指针以供“以后”使用,那么当它试图通过该指针设置
s
“以后”时,所有的麻烦都会爆发,因为指向的原始
s
是一个临时变量,“以后”根本不存在

这就是为什么Swift很难做到的原因:它试图保护你不受自己的伤害(并且成功)。重新思考你的目标


如果你问一个描述你最终目标的问题,不管它是什么,而不是一个局限于你实际上不可用的狭窄方法的问题,那会更好。

我很困惑,实际上,你想做什么。我希望能够从传递指针的其他类中更改字符串的值。例如:我的视图控制器有“Name”字符串,我想从Field类中更改它的值。我怀疑您最好使用Key-value-Observing()。
inout
已经指定它将更改原始文本值?不适用于NSMutableString。是的,我没有传递指针。这就是为什么我说我感到困惑。您描述的方式与您想要做的不完全相同吗?
inout
如果您将Field类中的
text
更改为
NSMutableString
,则不需要。如果您附加了一个字符串,它就可以工作。但是如果你指定了一个不同的值,它就不起作用了。不确定如何用协议实现相同的结果目的是更改传入的
文本
对吗?您可以创建一个协议,该协议有一个在发生事件时更改文本的方法。强烈建议从苹果下载Swift图书,解释非常好。如果你想成为一名优秀的iOS开发人员,你必须了解协议。