首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查变量是否是可选的,以及它包装的类型

检查变量是否是可选的,以及它包装的类型
EN

Stack Overflow用户
提问于 2015-09-18 14:50:36
回答 2查看 4.7K关注 0票数 14

是否可以检查变量是否是可选的,以及它包装的是什么类型?

可以检查变量是否为特定的可选变量:

代码语言:javascript
复制
let someString: String? = "oneString"
var anyThing: Any = someString

anyThing.dynamicType // Swift.Optional<Swift.String>
anyThing.dynamicType is Optional<String>.Type // true
anyThing.dynamicType is Optional<UIView>.Type // false

但是有没有可能检查任何类型的可选?类似于:

代码语言:javascript
复制
anyThing.dynamicType is Optional.Type // fails since T cant be inferred
// or 
anyThing.dynamicType is Optional<Any>.Type // false

一旦知道你有一个可选的,检索它包装的类型:

代码语言:javascript
复制
// hypothetical code 
anyThing.optionalType // returns String.Type
EN

回答 2

Stack Overflow用户

发布于 2015-09-25 19:27:38

因为a protocol can be created as means of a Optional,所以可以使用相同的协议来提供对optional类型的访问。示例在Swift 2中,尽管它在以前的版本中应该具有类似的工作方式:

代码语言:javascript
复制
protocol OptionalProtocol {
    func wrappedType() -> Any.Type
}

extension Optional : OptionalProtocol {
    func wrappedType() -> Any.Type {
        return Wrapped.self
    }
}

let maybeInt: Any = Optional<Int>.Some(12)
let maybeString: Any = Optional<String>.Some("maybe")

if let optional = maybeInt as? OptionalProtocol {
    print(optional.wrappedType()) // Int
    optional.wrappedType() is Int.Type // true
}

if let optional = maybeString as? OptionalProtocol {
    print(optional.wrappedType()) // String
    optional.wrappedType() is String.Type // true
}

该协议甚至可以用于check and unwrap the contained optional value

票数 9
EN

Stack Overflow用户

发布于 2015-09-18 19:12:01

使用Swift2.0:

代码语言:javascript
复制
let someString: String? = "oneString"
var anyThing: Any = someString

// is `Optional`
Mirror(reflecting: anyThing).displayStyle == .Optional // -> true

但是提取包装类型并非易事。

您可以:

代码语言:javascript
复制
anyThing.dynamicType // -> Optional<String>.Type (as Any.Type)
Mirror(reflecting: anyThing).subjectType // -> Optional<String>.Type (as Any.Type)

但是我不知道如何从用Any.Type包装的Optional<String>.Type中提取String.Type

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32645612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档