假设我有一些类型为
的变量let someVariable: SomeType<AnotherType?>
我确信这个具体实例不包含任何nil
AnotherType?
。是否有将其转换为SomeType<AnotherType>
的一般方法?例如,我需要在某些函数中使用此转换以使用someVariable
。
答案 0 :(得分:0)
它可以遵循这些方针:
protocol _Optional {
associatedtype _Wrapped
func unveil() -> _Wrapped?
}
extension Optional: _Optional {
typealias _Wrapped = Wrapped
func unveil() -> _Wrapped? { return self }
}
extension SomeType where T: _Optional {
func rewrap() -> SomeType<T._Wrapped>? {
guard let _value = value.unveil() else { return nil }
return SomeType<T._Wrapped>(value: _value)
}
}
struct SomeType<T> {
let value: T
}
let someValue = SomeType<Int?>(value: 42) // SomeType<Int?>
let rewrappedValue = someValue.rewrap() // SomeType<Int>?
let forceUnwrappedValue = someValue.rewrap()! // SomeType<Int>
细节取决于SomeType
的特定实现的细节(我在我的例子中使用了一个最简单的假设)。