属性 包装器:将空更改为可选
Property wrapper: change empty to Optional
我创建了以下扩展:
import Foundation
extension Collection {
/// Returns `nil` if empty
var nonEmptyValue: Self? {
isEmpty ? nil : self
}
}
现在我想让它成为一个 属性 包装器,这样我就可以像这样使用它:
final class MyClass {
@NonEmpty
var string: String? = "test"
}
这个想法是,只要将空字符串分配给 属性,它就会被替换为 nil
。
是否有可能创建这样一个 属性 包装器(因为 String?
和 String
是不同的类型),我将如何去做?
我正在使用您的分机:
import Foundation
@propertyWrapper
struct NonEmpty<T: Collection> {
var wrappedValue: T? {
didSet {
self.wrappedValue = wrappedValue?.nonEmptyValue
}
}
init(wrappedValue: T?) {
self.wrappedValue = wrappedValue?.nonEmptyValue
}
}
extension Collection {
/// Returns `nil` if empty
var nonEmptyValue: Self? {
isEmpty ? nil : self
}
}
结果如下图所示:
我创建了以下扩展:
import Foundation
extension Collection {
/// Returns `nil` if empty
var nonEmptyValue: Self? {
isEmpty ? nil : self
}
}
现在我想让它成为一个 属性 包装器,这样我就可以像这样使用它:
final class MyClass {
@NonEmpty
var string: String? = "test"
}
这个想法是,只要将空字符串分配给 属性,它就会被替换为 nil
。
是否有可能创建这样一个 属性 包装器(因为 String?
和 String
是不同的类型),我将如何去做?
我正在使用您的分机:
import Foundation
@propertyWrapper
struct NonEmpty<T: Collection> {
var wrappedValue: T? {
didSet {
self.wrappedValue = wrappedValue?.nonEmptyValue
}
}
init(wrappedValue: T?) {
self.wrappedValue = wrappedValue?.nonEmptyValue
}
}
extension Collection {
/// Returns `nil` if empty
var nonEmptyValue: Self? {
isEmpty ? nil : self
}
}
结果如下图所示: