是否有一个函数来确定Swift中的变量类型?我猜想在Python中可能有类似于type()的东西。
我想要一种方法来判断一个变量是一个Foundation对象或C变量在Swift。就像NSString vs String,或者NSArray vs array。所以我可以在控制台中注销它,看看它是什么。
例如,我想知道下面第一个数组推断的类型:
var array = [1,2,3] // by default NSArray or array? var array:[Int] = [1,3] var array:NSArray = [1,3] var array:Array<Any> = [1,3]
我已经看到了答案,判断一个给定的变量是一种给定类型在this question,但我会说,这是非常不同于我想要的。
您可以使用.dynamicType属性获取对值的类型对象的引用。这相当于Python的type()函数,并且提到了
in the Swift documentation under Language Reference: Types: Metatype Type。
原文链接:https://www.f2er.com/swift/320934.htmlvar intArray = [1,3] let typeOfArray = intArray.dynamicType
使用此类型对象,我们可以创建相同数组类型的新实例。
var newArray = typeOfArray() newArray.append(5) newArray.append(6) println(newArray)
[5,6]
我们可以看到,这个新的值是相同的类型([Int])通过尝试附加一个float:
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()方法,如使用in SiLo’s answer,
println(mixedArrayType.description())
__NSArrayI
但是,这不是存在于类型,如Swift的内置数组。
println(typeOfArray.description())
error: '[Int].Type' does not have a member named 'description'