在ibooks上发布的Swift指南中,作为!没有提到运营商。但在在线参考和一些示例代码中,他们(我的意思是苹果在两种情况下)都用作!运营商。
as和as之间是否有区别!运营商?如果有,你能解释一下吗?
编辑:我很累,我错误地输入“是”,而不是“as”。现在已经纠正了......
答案 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
}
}