Swift 初見 (Swift 2)
- May 12 Thu 2022 15:54
[Swift] 學習資源
- May 11 Wed 2022 17:19
[SwiftUI] Binding converter (類windows phone style)
建立類似Windows Phone的雙向綁定型態轉換器(IValueConverter),
並搭配extension來實現預設實作,再建DateToStringConverter。
在使用的時候,
TextField("test", text: $enterDate.convert(converter: dateToStringConverter), prompt: Text("請輸入"))
extension Binding {
func convert(converter: T) -> Binding where T: IValueConverter,
Value == T.Source {
return Binding {
return converter.convert(value: self.wrappedValue)
} set: { (value: T.Target) in
do {
self.wrappedValue = try converter.convertBack(value: value)
} catch {
print(String(describing: error))
}
}
}
}
protocol IValueConverter {
associatedtype Source
associatedtype Target
associatedtype Parameter
var parameter: Parameter { get }
func convert(value: Source) -> Target
func convertBack(value: Target) throws -> Source
}
struct DateToStringConverter: IValueConverter {
typealias Source = Date?
typealias Target = String
typealias Parameter = String
let parameter: Parameter
init(parameter: Parameter) {
self.parameter = parameter
}
func convert(value: Source) -> Target {
return value?.toString(format: parameter) ?? ""
}
func convertBack(value: Target) throws -> Source {
guard let value = value.toDate(format: parameter) else {
throw NSError(domain: "Can't cast from \(Source.self) to \(Target.self)", code: -1)
}
return value
}
}
- Apr 14 Thu 2022 22:01
[OC & Swift 混編] NavigationParameter
- Feb 26 Sat 2022 20:47
[Objective-C] 柯里化 Curring 寫法
- Jan 20 Thu 2022 01:21
[超好聽音樂] 你的世界我曾來過