【问题标题】:Type Casting in swift快速类型铸造
【发布时间】:2016-03-03 02:28:54
【问题描述】:

我对 Swift 中的类型转换有点困惑。

有一点疑问。 as?,as! 和只有 as 有什么区别。 我们可以说“as”类似于is

提前致谢。

【问题讨论】:

  • 请先搜索。这已经被很好地解释了很多次了。更好的是,学习 Swift。
  • 是的,我已经搜索并得到了关于“as?”的答案并作为!”但不仅仅是“作为”
  • as 用于在保证成功的情况下进行强制转换(String 转 NSString,[AnyObject] 转 NSArray 等)
  • 那么“as”和“as”有什么区别!
  • as!如果不能保证就使用。

标签: swift casting


【解决方案1】:

'as' 关键字用于强制转换。

'as' 例子:

let calcVC = destinationViewController as CalculatorViewController

这一行将destinationViewController 转换为CalculatorViewController。但是,如果 destinationViewController 不是 CalculatorViewController 或其子类,则会崩溃。

为了防止崩溃,您可以使用 'if let' 和 'as?'...

'作为?示例:

if let calcVC = destinationViewController as? CalculatorViewController {
   // ... write code to execute if destinationViewController is in fact a CalculatorViewController
}

您甚至可以在尝试使用“is”关键字执行“as”之前进行检查...

'是'例子:

if destinationViewController is CalculatorViewController {
   //...
}

【讨论】:

  • 谢谢,很好的解释。但仍然不清楚只有 "as" 。我试过var button = somebutton as UIButton,它抛出了一个错误。
  • 您遇到的错误是什么? somebutton 是 UIButton 类型的实例还是 UIButton 的子类?如果不是,则将引发错误。如果一个对象是某个类的实例或子类的实例,则只能将其强制转换为该类。
【解决方案2】:

is 用于检查值的类型,而as 用于将值转换为不同的类型。

条件形式as? 返回您尝试向下转换为的类型的可选值。

例子:

let number: Int = 1 
if number as? Int {
print ("Int")
} 

如果 number 是 Int 类型,您正在“询问”。

使用as!,例如,您强制将您的让数设为某种类型,如果不是,您将面临崩溃!

例子:

if number as! String { //CRASH

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多