如何屏蔽 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 子句。在我看来你应该总是屏蔽数据,即使源字符串太短。