我有一串 test@me
现在,我想创建一个代码,让我可以剪切出@
is并将其保存为变量,因此预期结果是string1 = test
string2 = @me
代码将是这样的
func test(string: String) {
var mString = string
var cuttedString = mString.cutFrom("@")
print(mString)
print(cuttedString)
}
test(string: "test@me")
结果:
test
@me
这是其中一种extension
,String
可以执行您想要的功能。它需要aString
并String
通过删除该部分上的所有内容来改变该调用,然后返回被删除的部分。
import Foundation
extension String {
mutating func cut(from string: String) -> String {
if let range = self.range(of: string) {
let cutPart = String(self[range.lowerBound...])
self.removeSubrange(range.lowerBound...)
return cutPart
}
else {
return ""
}
}
}
func test(string: String) {
var mString = string
let cutString = mString.cut(from: "@")
print(mString)
print(cutString)
}
test(string: "test@me")
test @me
这是@LeoDabus在评论中建议的通用实现:
extension StringProtocol where Self: RangeReplaceableCollection {
@discardableResult mutating func removeSubrange<S: StringProtocol>(from string: S) -> SubSequence {
guard let range = range(of: string) else { return "" }
defer { removeSubrange(range.lowerBound...) }
return self[range.lowerBound...]
}
}
它很好地展示了:
String
允许该函数与其他类型一起使用,例如String.Subsequence
。@discardableResult
可以调用函数以缩短,String
而无需使用返回的子字符串。guard let
语句解开可选的返回值range(of:)
并提供较早的退出nil
。defer
延迟删除子字符串,直到返回子字符串之后,这避免了使用局部变量。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句