展开泛型类型

时间:2016-09-27 07:27:25

标签: swift swift3

假设我有一些类型为

的变量
let someVariable: SomeType<AnotherType?>

我确信这个具体实例不包含任何nil AnotherType?。是否有将其转换为SomeType<AnotherType>的一般方法?例如,我需要在某些函数中使用此转换以使用someVariable

1 个答案:

答案 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的特定实现的细节(我在我的例子中使用了一个最简单的假设)。