早些时候我发现了一个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/