我知道我们可以使用下标来剪切Swift 4中的一部分字符串。
let s = "aString"
let subS = s[..<s.endIndex]
但问题是,如何将s
剪切为类似aStr
的子字符串。
我的意思是,我想做的事情就像s[..<(s.endIndex-3)]
但这不对。
那么,如何在Swift 4中做到这一点。
答案 0 :(得分:15)
String.Index
不是整数,您不能简单地减去
s.endIndex - 3
,&#34;集合移动其索引&#34;,请参阅
关于斯威夫特进化的A New Model for Collections and Indices。
必须注意不要将索引移动到有效范围之外。 例如:
let s = "aString"
if let upperBound = s.index(s.endIndex, offsetBy: -3, limitedBy: s.startIndex) {
let subS = String(s[..<upperBound])
} else {
print("too short")
}
或者,
let upperBound = s.index(s.endIndex, offsetBy: -3, limitedBy: s.startIndex) ?? s.startIndex
let subS = String(s[..<upperBound])
如果s
少于3个字符,则会打印一个空字符串。
如果你想要一个字符串的初始部分,那么你可以简单地做
let subS = String(s.dropLast(3))
或作为一种变异方法:
var s = "aString"
s.removeLast(min(s.count, 3))
print(s) // "aStr"
答案 1 :(得分:2)
正如您所说,错误是Binary operator '-' cannot be applied to operands of type 'String.Index' and 'Int'
您必须先找到Swift.Index
。
let s = "aString"
let index = s.index(s.endIndex, offsetBy: -3)
let subS = s[..<index]
print(String(subS))
答案 2 :(得分:0)
从一开始,我想要的只是一个简单的Substring,由x个字符组成。这是一个功能。
func SimpleSubstring(string : String, length : Int) -> String {
var returnString = string
if (string.count > length) {
returnString = String(string[...string.index(string.startIndex, offsetBy: length - 1)])
}
return returnString
}
用法
let myTruncatedString : String = SimpleSubstring(string: myBigString, length: 10)