相关疑难解决方法(0)

确定Any.Type是否为可选

我正在尝试确定给定的type t(Any.Type)是否是可选类型,我正在使用此测试

t is Optional<Any>.Type
Run Code Online (Sandbox Code Playgroud)

但它总是返回false.

有没有办法实现这个目标?

dynamic swift

13
推荐指数
2
解决办法
3103
查看次数

检查变量是否为Optional,以及它包装的类型

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

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

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
Run Code Online (Sandbox Code Playgroud)

但是有可能再次检查任何类型的可选项吗?就像是:

anyThing.dynamicType is Optional.Type // fails since T cant be inferred
// or 
anyThing.dynamicType is Optional<Any>.Type // false
Run Code Online (Sandbox Code Playgroud)

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

// hypothetical code 
anyThing.optionalType // returns String.Type
Run Code Online (Sandbox Code Playgroud)

swift

13
推荐指数
2
解决办法
4064
查看次数

可以将Any转换为Optional吗?

假设我有一段这样的代码:

let x: Int? = 10  
let y: Any = x
Run Code Online (Sandbox Code Playgroud)

现在我想把y转换成Int?:

let z = y as Int? // Error: Cannot downcast from 'Any' to a more optional type 'Int?'
Run Code Online (Sandbox Code Playgroud)

这是不可能还是有另一种方式?

casting optional swift

7
推荐指数
1
解决办法
1790
查看次数

在Swift中转换为泛型可选

我正在摆弄Swift中的泛型并找到一些我无法弄清楚的东西:如果我将一个值转换为泛型参数的类型,则不会执行强制转换.如果我尝试使用静态类型,它可以工作.

class SomeClass<T> {
    init?() {
        if let _ = 4 as? T {
            println("should work")
        } else {
            return nil
        }
    }
}

if let _ = SomeClass<Int?>() {
    println("not called")
}

if let _ = 4 as? Int? {
    println("works")
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这种行为吗?这两种情况不应该相同吗?

更新

以上示例简化为最大值.以下示例说明了需要更好的演员表

class SomeClass<T> {
    init?(v: [String: AnyObject]) {
        if let _ = v["k"] as? T? {
            print("should work")
        } else {
            print("does not")
            return nil
        }
    }
}

if let _ = SomeClass<Int?>(v: ["k": 4]) …
Run Code Online (Sandbox Code Playgroud)

generics optional swift

6
推荐指数
1
解决办法
947
查看次数

如何从Swift中的Mirror子类中提取可选的类型值?

我有几个类似于以下类似的快速类

public class Book {
  var title: String?
  var date: NSDate?
}
Run Code Online (Sandbox Code Playgroud)

由于我需要访问属性的几个不同的类,我使用反射来运行类的属性:

let myBook = Book()
myBook.title = "Hello"
myBook.date = NSDate()

let mirror = Mirror(reflecting: myBook)
var propsArr = [(key: String?, value: Any)]()
let mirrorChildrenCollection = AnyRandomAccessCollection(mirror.children)!
if mirrorChildrenCollection.count > 0 {
  propsArr += mirrorChildrenCollection
}

//iterate through properties
for case let (label?, value) in propsArr {
  print (label, value)

  if let val = value as? NSDate {
    var extractedDate = val
    print(extractedDate)
  }
  else if let val …
Run Code Online (Sandbox Code Playgroud)

reflection mirror swift

6
推荐指数
1
解决办法
1288
查看次数

标签 统计

swift ×5

optional ×2

casting ×1

dynamic ×1

generics ×1

mirror ×1

reflection ×1