当前位置: 首页 > 面试题库 >

如何在Swift中确定变量的类型

拓拔弘化
2023-03-14
问题内容

在Swift中是否有确定变量类型的函数?我想可能会有类似type()Python的东西。

我想一种判断变量是Swift中的Foundation对象还是C变量的方法。就像NSString vs String,或NSArray vs
array。这样我就可以在控制台中注销并清楚地看到它是什么。

例如,我想知道array下面第一个推断的类型:

var array = [1,2,3]  // by default NSArray or array?
var array:[Int] = [1,2,3]
var array:NSArray = [1,2,3]
var array:Array<Any> = [1,2,3]

在这个问题中,我已经看到判断 给定 变量是否是 给定
类型的答案,但我会说这与我想问的完全不同。


问题答案:

您可以通过使用.dynamicType属性来获取对值的类型对象的引用。这等效于Python的type()功能,并且在Swift文档的“语言参考:类型:元类型Type”下进行了提及。

var intArray = [1, 2, 3]
let typeOfArray = intArray.dynamicType

使用此类型对象,我们能够创建相同数组类型的新实例。

var newArray = typeOfArray()
newArray.append(5)
newArray.append(6)
println(newArray)



[5, 6]

[Int]通过尝试添加浮点数,我们可以看到此新值具有相同的类型():

newArray.append(1.5)



error: type 'Int' does not conform to protocol 'FloatLiteralConvertible'

如果导入Cocoa并使用带有混合类型的数组文字,我们可以看到NSArray创建了一个:

import Cocoa

var mixedArray = [1, "2"]
let mixedArrayType = mixedArray.dynamicType

var newArray = mixedArrayType()
var mutableArray = newArray.mutableCopy() as NSMutableArray

mutableArray.addObject(1)
mutableArray.addObject(1.5)
mutableArray.addObject("2")

println(mutableArray)



(1, "1.5", 2)

但是,目前似乎还没有任何通用的方法来生成类型对象的字符串描述,因此这可能无法起到您所要求的调试作用。

衍生自的类型NSObject确实具有一种.description()方法,如SiLo的答案中所使用的,

println(mixedArrayType.description())



__NSArrayI

但是,这在诸如Swift的内置数组之类的类型中不存在。

println(typeOfArray.description())



error: '[Int].Type' does not have a member named 'description'


 类似资料:
  • 问题内容: 我如何查看变量的类型(无符号32位,带符号16位等)? 问题答案: 与的类型不同,这似乎是你的问题。 尝试这个: 不过,在Python 3.0中int和long之间的区别消失了。

  • 问题内容: 我想检查数组的元素是否是Swift中UILabel的子类: 不与目标c搭桥。 问题答案: Swift让运算符测试值的类型: 顺便说一句,这仍然会产生,而不是。从Swift 2 beta系列开始,您可以为此使用flatMap: 以前(Swift 1),您可以投射,虽然可以,但是感觉有点难看。 否则,您需要某种方式来构建仅包含标签的列表。不过,我看不到任何标准。也许像这样:

  • 问题内容: 有没有一种方法可以快速打印变量的运行时类型?例如: 在上面的示例中,我正在寻找一种方法来表明变量“ soon”的类型为,或至少为。 问题答案: 2016年9月更新 Swift 3.0:使用,例如(因为关键字已删除) 2015年10月更新 : 我将下面的示例更新为新的Swift 2.0语法(例如,已被替换为,现在是)。 从Xcode 6.3发行说明 : @nschum在注释中指出Xcod

  • 问题内容: Java中是否有类似“ typeof”的函数来返回原始数据类型(PDT)变量的类型或操作数PDT的表达式? 似乎仅适用于类类型。 问题答案: 请尝试以下操作: 它将打印: 至于,您可以使用其动态对应项:

  • 我想检查变量是否为类型。对于其他类型,我们可以执行以下操作: 但是对于来说,这种简单的方法是不可能的。也就是说,我们不能说。还有别的办法吗?为什么这对某些类型是可能的,而对其他类型是不可能的?非常感谢。

  • 问题内容: 的PDOStatement对象:: bindValue() 方法提供了一种方式来指定绑定的变量的类型: PDOStatement :: bindValue($ parameter,$ value [, $ data_type = PDO :: PARAM_STR ]) 我想知道,指定数据类型的目的是什么,而当保留为默认值()时,最终数据库将在使用它之前将值强制转换为正确的类型? 例如,