有时候操作String在Swift中可能有点麻烦,这里有些技巧,可能会对您的开发有所帮助。 ###Split 将字符串拆分为数组。
let text = "ab.c1,23"
print(text.components(separatedBy: [".", ","]))
// ["ab", "c1", "23"]
复制代码
将数组转化为字符串。
print(["ab", "c1", "23"].reduce("", { $0 + $1}))
// abc123
复制代码
###Sort string 首先,我们将拆分字符串,然后排序,然后再连接在一起。 在这个例子中,我将数组映射到数组,所以它可以更容易排序。 这可能是没有必要的,但我还没有找到一个更好的方法,如果您知道,希望你能告诉我。
let text = "ab.c1,23"
print(text.characters.sorted { $0 < $1 }.flatMap({ String($0) }).joined())
// ,.123abc
复制代码
###Trim whitespace 从字符串中删除所有前导和尾随空格。
extension String {
func trimmed(set: CharacterSet = .whitespaces) -> String {
return trimmingCharacters(in: set)
}
}
let text = " ab23 "
print(text.trimmed())
// "ab23"
复制代码
其中还有很多其他字符集包括: alphanumericCharacterSet whitespaceCharacterSet symbolCharacterSet punctuationCharacterSet 此外,您可以通过添加.inverted到最后来获得任何字符集的反集。 ###删除String中的所有空格
let text = " a b 2 3 "
print(text.replacingOccurrences(of: " ", with: ""))
// "ab23"
复制代码
###Substring 访问字符串中的字符显得有点冗长。 它有助于将Swift中的String视为不是字符数组,而是作为Unicode标量,可以使用String.unicodeScalars访问。 String.Index跟踪字符索引。 当然,可以扩展String以允许使用Integer下标。 请记住,在某些情况下,这可能会添加歧义。 Swift希望我们是明确的获取字符串中的子串:
extension String {
func substring(to string: String) -> String {
return substring(to: (range(of: string)?.lowerBound) ?? endIndex)
}
subscript (i: Int) -> String {
return String(self[self.index(self.startIndex, offsetBy: i)])
}
subscript (r: Range<Int>) -> String {
let start = self.index(self.startIndex, offsetBy: r.lowerBound)
let end = self.index(self.startIndex, offsetBy: r.upperBound)
return self[start...end]
}
}
var text = "1234<user>"
print(text.substring(to: "<")) // "1234"
print(text[2]) // 3
复制代码
###suffix/prefix
let line = "0001 Some test data here %%%%"
line.hasPrefix("0001") // true
line.hasSuffix("%%%%") // true
复制代码
###转换为大小写 顾名思义:
let mixedCase = "AbcDef"
let upper = mixedCase.uppercased()
// "ABCDEF"
let lower = mixedCase.lowercased()
// "abcdef"
复制代码
###Counting String不直接具有返回计数的属性,因为它只对特定表示有意义。 所以count在每个集合上实现:
var emptyString = ""
emptyString.isEmpty // true
let spain = España
print("\(spain.characters.count)") // 6
print("\(spain.unicodeScalars.count)") // 6
print("\(spain.utf16.count)") // 6
print("\(spain.utf8.count)") // 7
复制代码
比较排序:
if "aaa" < "bbb" {
print("aaa is less than bbb") // "aaa is less than bbb"
}
复制代码