输入铸造操作员

时间:2015-04-12 17:37:02

标签: swift types casting

在ibooks上发布的Swift指南中,作为!没有提到运营商。但在在线参考和一些示例代码中,他们(我的意思是苹果在两种情况下)都用作!运营商。

as和as之间是否有区别!运营商?如果有,你能解释一下吗?

编辑:我很累,我错误地输入“是”,而不是“as”。现在已经纠正了......

2 个答案:

答案 0 :(得分:0)

为?将做一个可选的向下转换 - 意思是如果它失败它将返回零 所以“Blah”为? Int将返回Int?如果失败则为零值,如果不失败则为Int。

如!强制转发尝试,如果转换失败将抛出异常。一般来说你会喜欢as?垂头丧气

//ex optional as?
let nine = "9"
if let attemptedNumber = nine as? Int {
  println("It converted to an Int")
}

//ex as!
let notNumber = "foo"
let badAttempt = notNumber as! Int // crash!

(你可能会发现有一个更新正在那里为快速指南。在网上版本https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html肯定会提到它)

答案 1 :(得分:0)

运算符是as?运算符的强有力 unwrapped 可选形式。与任何强力展开一样,如果解包不成功,这些风险运行时错误会导致应用程序崩溃。

此外,如果您不希望在左侧写入类型,我们应该使用as进行向上转换,但最佳做法是使用正常类型编写它,如上所示进行向上转换。

示例:

您使用as关键字来投射数据类型。 UIWindow rootViewController的类型为UIViewController。您将其转发到UISplitViewController

另一个更好的例子可以如下。

 var shouldBeButton: UIView = UIButton()
var myButton: UIButton = shouldBeButton as UIButton  

as?运算符返回一个可选项,然后我们使用可选绑定将它分配给临时常量,然后在if条件中使用它,就像我们在下面的示例中所做的那样。

let myControlArray = [UILabel(), UIButton(), UIDatePicker()]

for item in myControlArray
{
    if let myLabel = item as? UILabel
    {
        var storeText = myLabel.text
    }
    else if let someDatePicker = item as? UIDatePicker
    {
        var storeDate = someDatePicker.date
    }
}