[英]How can I add a method to NSString in Swift so that it sets the value of Self?
我知道子類化 NSString 是一件壞事,但我想在 Swift 中向 NSString 添加方法,以便我可以在存儲其值之前根據特定規則清理字符串。
我想也許我可以做一些非常簡單的事情(在這個例子中沒有消毒——我現在只是在嘗試:
import Foundation
extension String{
func setString(setter:String) {
self = setter
}
}
但這不起作用 - 'self' 是不可變的。 從查看文檔來看,這對於初始化程序是有效的 - 但我不一定要為所有字符串調用此代碼。
我可以找到繞過 ObjC 的方法 - 但我參加 Swift 的派對很時髦。 有什么建議么?
更新
所以這是我正在嘗試做的更准確的表示(感謝迄今為止提供幫助的每個人)
import Foundation
@objc extension NSString {
func sanitizedFilename() -> String {
let invalidCharacters = CharacterSet(charactersIn: "\\/:*?\"<>|")
.union(.newlines)
.union(.illegalCharacters)
.union(.controlCharacters)
return self.components(separatedBy: invalidCharacters).joined(separator: "")
}
func sanitizedString() -> String {
var invalidCharacters = CharacterSet().union(.illegalCharacters).union(.controlCharacters)
invalidCharacters.remove("\n")
invalidCharacters.remove("\t")
return self.components(separatedBy: invalidCharacters).joined(separator: "")
}
mutating func sanitizeFilename() {
self = self.sanitizedFilename() as NSString
}
mutating func sanitizeString() {
self = self.sanitizedString() as NSString
}
}
如果我刪除 NSString 的東西 - 將它保留為 String 然后它會構建,但我不能有 @objc,因此我不能從 Objective C 使用它。如果我把 NSString 的東西放進去,那么 self 是不可變的。
我有一種感覺,對於那些真正知道自己在做什么的人來說,這是一個非常容易解決的問題,我可能應該把頭放在水桶里。
這里有一些東西可以幫助你理解這一點。
import Foundation
extension String {
// returns a new sanitized value (doesn't change anything in caller)
func sanitized() -> String {
return self.replacingOccurrences(of: "(", with: "")
.replacingOccurrences(of: ")", with: "")
}
// Sanitizes self (changes the value of caller)
// mutating is necessary when you need to modify self
mutating func sanitize() {
self = self.sanitized()
}
}
示例用法
let test1 = "(Test)"
let output1 = test1.sanitized() // receive a new value
print(output1) // Test
var test2 = "(Test)"
test2.sanitize() // modify the caller, it has to be var (not let)
print(test2) // Test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.