在Objective-C我用:如何查找Swift字符串中子字符串的最後一次出現?
[@"abc def ghi abc def ghi" rangeOfString:@"c" options:NSBackwardsSearch];
但現在看來NSBackWardsSearch不存在。任何人都可以提供Swift的等效代碼嗎?
我希望能夠在整個字符串中找到字符編號,如果可能的話。所以在上面的例子中它將返回3.
在Objective-C我用:如何查找Swift字符串中子字符串的最後一次出現?
[@"abc def ghi abc def ghi" rangeOfString:@"c" options:NSBackwardsSearch];
但現在看來NSBackWardsSearch不存在。任何人都可以提供Swift的等效代碼嗎?
我希望能夠在整個字符串中找到字符編號,如果可能的話。所以在上面的例子中它將返回3.
Cocoa框架應該可以在Swift中訪問,但是您需要導入它們。嘗試導入Foundation
以訪問NSString API。從「使用Swift與Cocoa和Objective-C」的「Working with Cocoa Data Types–Strings」指南:
Swift會自動橋接String類型和NSString類。 [...]要啓用字符串橋接,只需導入Foundation。
此外,NSBackwardsSearch
是一個枚舉值(標&導入爲option),所以你必須使用Swift的枚舉/ option語法訪問它(作爲NSStringCompareOptions
選項類型的一部分)。前綴從C enumeration值中除去,所以從值名稱中刪除NS
。
兩者都在一起,我們有:
import Foundation
"abc def ghi abc def ghi".rangeOfString("c", options:NSStringCompareOptions.BackwardsSearch)
請注意,您可能需要使用distance
and advance
功能正常使用範圍從rangeOfString
。
雨燕3.0:
"abc def ghi abc def ghi".range(of: "c", options: String.CompareOptions.backwards, range: nil, locale: nil)
如果您要更換的最後一個子字符串中的:
(SWIFT 3)
extension String
{
func replacingLastOccurrenceOfString(_ searchString: String,
with replacementString: String,
caseInsensitive: Bool = true) -> String
{
let options: String.CompareOptions
if caseInsensitive {
options = [.backwards, .caseInsensitive]
} else {
options = [.backwards]
}
if let range = self.range(of: searchString,
options: options,
range: nil,
locale: nil) {
return self.replacingCharacters(in: range, with: replacementString)
}
return self
}
}
用法:
let alphabet = "abc def ghi abc def ghi"
let result = alphabet.replacingLastOccurrenceOfString("ghi",
with: "foo")
print(result)
// "abc def ghi abc def foo"
或者,如果您想完全刪除最後一個子字符串並清理它:
let result = alphabet.replacingLastOccurrenceOfString("ghi",
with: "").trimmingCharacters(in: .whitespaces)
print(result)
// "abc def ghi abc def"