斯威夫特:垂头丧气到已知类型

Pim*_*Pim 12 optional swift

我只是想知道…

let movie = item as? Movie
Run Code Online (Sandbox Code Playgroud)

在这个例子中item是类型Movie或其他类型.如果后者movie将被赋予零值.因此movie将是类型Movie?.

现在看看下一个例子:

let movie: Movie?

movie = item as? Movie
Run Code Online (Sandbox Code Playgroud)

假设movie是一个类变量,我在其中一个类方法中赋予了一些值.

对我来说,感觉as? Movie有些多余,因为movie已经知道它是类型的Movie?.

Swift中是否有任何语法说:"将此对象向下转换为与我分配给它的对象相同的类型.如果这是一个可选类型并且向下转换失败,则分配nil."?

我希望有类似的东西:

movie = item as?
Run Code Online (Sandbox Code Playgroud)

要么

movie =? movie
Run Code Online (Sandbox Code Playgroud)

Mic*_*lum 3

现有的答案正确地表明没有内置的功能。但只是为了在此处已编写的内容的基础上进行构建,可以定义一个中缀运算符=?来实现您在问题中描述的行为。例如:

infix operator =? {
    associativity none
    precedence 130
}

func =? <T>(inout lhs: T?, rhs: Any?) {
    lhs = rhs as? T
}

var movie: Movie?
let item: Any? = Movie(name: "some movie")

movie =? item
movie?.name // "some movie"
Run Code Online (Sandbox Code Playgroud)