我正在使用 TextFields 和 Button("Continue") 制作一個部分,然后對整個部分使用.disable(isValidAddress)修飾符來禁用該按鈕。該代碼運行良好,但我正在尋找任何解決方案以使其更簡潔,而無需為所有引數一一撰寫 .hasPrefix() 或 .hasSuffix() 。
var isValidAddress: Bool {
if name.hasPrefix(" ") || street.hasPrefix(" ") || city.hasPrefix(" ") || country.hasPrefix(" ") {
return false
} else if name.hasSuffix(" ") || street.hasSuffix(" ") || city.hasSuffix(" ") || country.hasSuffix(" ") {
return false
}
return true
}
uj5u.com熱心網友回復:
var isValidAddress: Bool {
[street, name, city, etc..].reduce(true, { result, text in
if text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
return false
} else {
return result
}
})
}
uj5u.com熱心網友回復:
您可以將它們添加到陣列中并修剪空白并在回圈中檢查是否為空
func isValidAddress() -> Bool {
for field in [name, street, city, country] {
if field.trimmingCharacters(in: .whitespaces).isEmpty { return false }
}
return true
}
我在這里使用了一個函式,但計算屬性也可以。
uj5u.com熱心網友回復:
var isHasPrefix: Bool = false
[name, street, city, country].forEach {
let hasPrefix = $0.hasPrefix(" ")
isHasPrefix = hasPrefix
}
let isValidAddress = isHasPrefix ? "true" : "false"
uj5u.com熱心網友回復:
如果您不介意將一些復雜性轉移到擴展中,您可以整理呼叫站點。這使它更具可讀性,并且不易出錯 - 例如,您可以輕松地添加另一個欄位而不會出錯。
extension String {
func hasPrefixOrSuffix(_ s: String) -> Bool {
hasPrefix(s) || hasSuffix(s)
}
var noSpacesAtEnds: Bool {
!hasPrefixOrSuffix(" ")
}
}
let isValid = [name, street, city, country]
.allSatisfy(\.noSpacesAtEnds)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494319.html
