如何使用swift屏蔽最后一个字符串,我的代码如下所示。但是代码只显示最后一个数字,我的期望是代码显示前5位
下面是我的代码:
extension StringProtocol {
var masked: String {
return String(repeating: "•", count: Swift.max(0, count-5)) + suffix(5)
} }
var name = "0123456789"
print(name.masked)我得到输出:···56789
但我的期望是:01234···
发布于 2019-03-21 19:45:28
使用前缀而不是后缀
extension StringProtocol {
var masked: String {
return prefix(5) + String(repeating: "•", count: Swift.max(0, count-5))
}
}您也可以创建一个函数,用于参数化位数和方向(甚至掩码字符)
extension StringProtocol {
func masked(_ n: Int = 5, reversed: Bool = false) -> String {
let mask = String(repeating: "•", count: Swift.max(0, count-n))
return reversed ? mask + suffix(n) : prefix(n) + mask
}
}
var name = "0123456789"
print(name.masked(5))
// 01234•••••
print(name.masked(5, reversed: true))
// •••••56789发布于 2020-05-12 09:37:18
如果你想屏蔽一个电子邮件地址。下面是代码
func maskingEmail(email: String) -> String {
let emailComponents = email.components(separatedBy: "@")
let emailDomainComponents = emailComponents[1].components(separatedBy: ".")
let maskedEmailName = String(repeating: "•", count: Swift.max(0, emailComponents[0].count-3)) + emailComponents[0].suffix(3)
let maskedEmailProvider = String(repeating: "•", count: Swift.max(0, emailDomainComponents[0].count-3)) + emailDomainComponents[0].suffix(3)
let emailDomain = emailDomainComponents[1]
return "\(maskedEmailName)@\(maskedEmailProvider).\(emailDomain)"
}
// The Output
print(maskingEmail(email: "pr1vaterelay@gmail.com")) // •••••••••lay@••ail.com
print(maskingEmail(email: "private_relay@bk.ru")) // ••••••••••lay@bk.ru
print(maskingEmail(email: "private.relay@protonmail.com")) // ••••••••••lay@•••••••ail.comhttps://stackoverflow.com/questions/55279663
复制相似问题