基本上,我想创建一个程序,如果你开始输入一个名字,应用程序将从数据库中识别它并为你填写名称。要执行此操作,如果某人在完成名称后键入逗号,则应用程序将开始记录下一个名称。如果它作为数据库中某个名称的子字符串匹配,则会将其填入用户。问题是我需要在textField字符串中最后一次出现逗号字符后到目前为止填写名称的哪一部分,但我不知道如何填写。例如: 用户类型:“Daniel,Joh” 该应用程序为你填写约翰。感谢。
答案 0 :(得分:2)
如果您真的想要最后一个逗号后的字符,可以使用正则表达式:
let string = "Hamilton, A"
let regex = try! NSRegularExpression(pattern: ",\\s*(\\S[^,]*)$")
if let match = regex.firstMatch(in: string, range: string.nsRange), let result = string[match.range(at: 1)] {
// use `result` here
}
在Swift 4中的位置:
extension String {
/// An `NSRange` that represents the full range of the string.
var nsRange: NSRange {
return NSRange(startIndex ..< endIndex, in: self)
}
/// Substring from `NSRange`
///
/// - Parameter nsRange: `NSRange` within the string.
/// - Returns: `Substring` with the given `NSRange`, or `nil` if the range can't be converted.
subscript(nsRange: NSRange) -> Substring? {
return Range(nsRange, in: self)
.flatMap { self[$0] }
}
}
答案 1 :(得分:2)
非常感谢Rob。我们甚至可以扩展他的String扩展名,包括对任何问题的完整回答,包括任何字符:
extension String {
func substringAfterLastOccurenceOf(_ char: Character) -> String {
let regex = try! NSRegularExpression(pattern: "\(char)\\s*(\\S[^\(char)]*)$")
if let match = regex.firstMatch(in: self, range: self.nsRange), let result = self[match.range(at: 1)] {
return String(result)
}
return ""
}
// ... Rob's String extension
}
所以我们只需要打电话:
let subStringAfterLastComma = "Hamilton, A".substringAfterLastOccurenceOf(",")
答案 2 :(得分:0)
带有range(of
和选项regularExpression
和backwards
的简单解决方案。
它将搜索逗号,后跟一个可选的空白字符。
extension String {
var subStringAfterLastComma : String {
guard let subrange = self.range(of: ",\\s?", options: [.regularExpression, .backwards]) else { return self }
return String(self[subrange.upperBound...])
}
}
let string1 = "Dan".subStringAfterLastComma // "Dan"
let string2 = "Daniel, Joh".subStringAfterLastComma // "Joh"