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

在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'

以上是 如何在Swift中确定变量的类型 的全部内容, 来源链接: utcz.com/qa/402861.html

回到顶部