我正在尝试从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 :(
答案 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))