【发布时间】:2021-10-03 09:39:40
【问题描述】:
我想用一个 func 扩展 Binding 扩展,我们可以将可选的 Binding 转换为非可选的 Binding 并将其用作普通的 Binding。我几乎可以完成它,但是 xCode 通过一个我无法处理的错误,我认为我做的一切都是正确的。
extension Binding {
mutating func safeBinding<T>(defaultValue: T) -> Binding<T> where Value == Optional<T> {
let safeValue: T
if let unwrappedValue: T = self.wrappedValue { safeValue = unwrappedValue }
else { safeValue = defaultValue }
return Binding.init(get: { () -> T in return safeValue },
set: { (newValue) in self.wrappedValue = newValue })
}
}
错误:
Cannot convert return expression of type 'Binding<Optional<T>>' to return type 'Binding<T>'
为我的方式更新了代码:
extension Binding {
func safeBinding<T>(defaultValue: T) -> Binding<T> where Value == Optional<T> {
let safeValue: T
if let unwrappedValue: T = self.wrappedValue { safeValue = unwrappedValue }
else { safeValue = defaultValue }
return SwiftUI.Binding.init(get: { () -> T in return safeValue },
set: { (newValue) in self.wrappedValue = newValue })
}
}
【问题讨论】: