早些时候我发现了一个question,但答案引出了另一个问题。是什么!?语法,我在其他地方没见过,但这是我唯一能让代码编译的方法。有人能告诉我什么吗??“语法的意思是?是虫子吗?链接显示所有代码。

field.superview!?.superview?.layer.borderWidth = 2

最佳答案

uialertcontroller的textFields属性是[AnyObject]?。所以这就是你要做的:

let textFields : [AnyObject]? = [UIView()] // textFields is an Optional
for field in textFields! { // you unwrap the Optional, but now...
    // ... field is an AnyObject
    let v1 = field.superview // now v1 is a UIView?!
}

你看到问题了吗?anyobject没有superview属性或任何其他属性。swift将允许这样做,但代价是将结果包装成可选的,因为这可能不是uiview,因此它可能不会响应superview(正如我解释的here)。所以现在它为您调用superview。但是superview本身会产生一个可选的(因为,如果这是一个uiview,它可能没有superview)。因此双重选择。
但如果你先选演员,那就不会发生了:
for field in textFields as [UIView] {

现在field是一个uiview,向它发送superview消息是合法的,您只需处理每个superview的单个展开。

关于swift - ! for_in []中奇怪的双展开包装 optional 语法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28247612/

10-12 19:47