如何屏蔽 Swift 中的第一个和最后一个字符?
How can i mask the first and last characters in Swift?
我有一个扩展来屏蔽第一个和最后一个字符。当我尝试屏蔽最后一个字符时,它起作用了,但如果我尝试屏蔽第一个字符,它就不会按照我的意愿屏蔽。
例如;
extension String {
func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
if self.count <= charCount {
return self
}
let mask = String(repeating: "*", count: charCount)
return lastCharacters ? self.prefix(self.count - charCount) + mask : self.suffix(self.count - charCount) + mask
}
}
let sample = "123456"
print(sample.maskedChar(3))
print(sample.maskedChar(3, lastCharacters: false))
// 123***
// 456***
我想看的基本都是***456
还有,有什么办法可以缩短代码吗? return 行太长看不到。
我会将 dropFirst/dropLast
与您创建的 mask
一起使用
extension String {
func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
if self.count <= charCount { return self }
let mask = String(repeating: "*", count: charCount)
return lastCharacters ? self.dropLast(charCount) + mask : mask + self.dropFirst(charCount)
}
}
真的很简单。您只需要在“not lastCharacters”情况下反转字符串和掩码中字符的顺序:
extension String {
func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
if self.count < charCount {
return String(repeating: "*", count: self.count)
}
let mask = String(repeating: "*", count: charCount)
if lastCharacters {
return self.prefix(self.count - charCount) + mask
} else {
return mask + self.suffix(self.count - charCount)
}
}
}
请注意,我还更改了开头的 if 子句。在我看来你应该总是屏蔽数据,即使源字符串太短。
我有一个扩展来屏蔽第一个和最后一个字符。当我尝试屏蔽最后一个字符时,它起作用了,但如果我尝试屏蔽第一个字符,它就不会按照我的意愿屏蔽。
例如;
extension String {
func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
if self.count <= charCount {
return self
}
let mask = String(repeating: "*", count: charCount)
return lastCharacters ? self.prefix(self.count - charCount) + mask : self.suffix(self.count - charCount) + mask
}
}
let sample = "123456"
print(sample.maskedChar(3))
print(sample.maskedChar(3, lastCharacters: false))
// 123***
// 456***
我想看的基本都是***456
还有,有什么办法可以缩短代码吗? return 行太长看不到。
我会将 dropFirst/dropLast
与您创建的 mask
一起使用
extension String {
func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
if self.count <= charCount { return self }
let mask = String(repeating: "*", count: charCount)
return lastCharacters ? self.dropLast(charCount) + mask : mask + self.dropFirst(charCount)
}
}
真的很简单。您只需要在“not lastCharacters”情况下反转字符串和掩码中字符的顺序:
extension String {
func maskedChar(_ charCount: Int, lastCharacters: Bool = true) -> String {
if self.count < charCount {
return String(repeating: "*", count: self.count)
}
let mask = String(repeating: "*", count: charCount)
if lastCharacters {
return self.prefix(self.count - charCount) + mask
} else {
return mask + self.suffix(self.count - charCount)
}
}
}
请注意,我还更改了开头的 if 子句。在我看来你应该总是屏蔽数据,即使源字符串太短。