将除所有类型之外的所有类型扩展为可选

时间:2018-11-22 09:40:17

标签: swift optional

出于有效编码的目的,我想知道是否有一种方法可以为所有带有声明异常的包装器类型在Optional上编写扩展。

在此特定情况下,该值为String

我想要的用例如下:

extension Optional where Wrapped != String {
    var asString: String? { return self as? String }
}

我在这里遇到了很多编译错误,当然这是不可能的。
我希望能够做到这一点,以使我看不到asString对象的String?属性,因为那里确实存在一些冗余。


注意:这应该能够应用于Wrapped可以采用的任何有效类型。

1 个答案:

答案 0 :(得分:0)

extension Optional {
    var asString: String? {
        guard let unwrapped = self else {
            return nil
        }
        return "\(unwrapped)"
    }
}

仅语言允许使用此解决方案

您不能在where块中排除某些类或协议。

示例

let some: Range? = 0..<1
some.asString
  

“ 0 .. <1”