Swift String操作不起作用

时间:2017-04-06 06:52:31

标签: ios swift xcode

我正在尝试从Label中读取字符串并从中删除最后一个字符。

这就是我的尝试:

@IBAction func del(sender: UIButton) {
    let str = telephone.text!;
    let newstr = str.remove(at: str.index(before: str.endIndex))
    telephone.text = newstr;
}

当我跑步时,我收到一个错误:

"String" does not have a member named "remove"

有人可以帮我解决问题吗? 刚开始学习swift :(

3 个答案:

答案 0 :(得分:1)

remove(at:)会改变接收器,因此接收器必须是变量 字符串:

var str = telephone.text!
str.remove(at: str.index(before: str.endIndex))
telephone.text = str

或者使用substring(to:),它返回新字符串 而不是修改接收器:

let str = telephone.text!
let newstr = str.substring(to: str.index(before: str.endIndex))
telephone.text = newstr

答案 1 :(得分:0)

您可以使用:

let idx = str.index(before: str.endIndex) // compute the index
let s = str.substring(to: idx)            // get the substring

答案 2 :(得分:0)

remove定义如下:

public mutating func remove(at i: String.Index) -> Character

请参阅mutating修饰符?这意味着它会改变调用该方法的实例。在您的情况下,实例是str,一个常量。由于常量不能变异,因此代码无法编译。

由于remove会返回已删除的字符,

let newstr = str.remove(at: str.index(before: str.endIndex))

此处newstr将不会存储删除了最后一个字符的字符串。

你应该重写这样的方法:

telephone.text!.remove(at: telephone.text!.index(before: telephone.text!.endIndex))