使用获取对象的类名作为字符串
object_getClassName(myViewController)
Run Code Online (Sandbox Code Playgroud)
返回这样的东西
_TtC5AppName22CalendarViewController
Run Code Online (Sandbox Code Playgroud)
我正在寻找纯版本:"CalendarViewController".如何获得清理的类名字符串?
我发现了一些有关此问题的尝试但不是真正的答案.这不可能吗?
当试图理解程序时,或者在某些角落情况下,能够真正找出什么类型的东西是有用的.我知道调试器可以显示一些类型信息,你通常可以依赖类型推断来避免在那些情况下不指定类型,但是,我仍然喜欢像Python这样的东西type()
更新:这在最近的Swift版本中已经更改,obj.dynamicType现在为您提供类型的引用,而不是动态类型的实例.
这个似乎是最有希望的,但到目前为止我还没有找到实际的类型
class MyClass {
var count = 0
}
let mc = MyClass()
# update: this now evaluates as true
mc.dynamicType === MyClass.self
Run Code Online (Sandbox Code Playgroud)
我也尝试使用类引用来实例化一个新对象,这确实有效,但奇怪地给了我一个错误,说我必须添加一个required初始化器:
作品:
class MyClass {
var count = 0
required init() {
}
}
let myClass2 = MyClass.self
let mc2 = MyClass2()
Run Code Online (Sandbox Code Playgroud)
尽管如此,实际发现任何给定对象的类型仍然只是一小步
编辑:我删除了大量现在无关的详细信息 - 如果您有兴趣,请查看编辑历史记录:)
是否有一个函数来确定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]
Run Code Online (Sandbox Code Playgroud)
我已经看到了判断一个给定变量在这个问题中是否是一种给定类型的答案,但我会说它与我想要的有很大不同.
这行代码用于使用Swift 2,但现在在Swift 3中不正确.
if gestureRecognizer.isMember(of: UITapGestureRecognizer) { }
Run Code Online (Sandbox Code Playgroud)
我收到此错误:类型名称后的预期成员名称或构造函数调用.
什么是正确的使用方法isMember(of:)?
PlayingCard继承自Card
鉴于具有相同名称的两个函数:
func match(othercards : [PlayingCard]) -> Int {
return 2
}
func match(othercards : [Card]) -> Int {
return 2
}
Run Code Online (Sandbox Code Playgroud)
它抛出错误说:覆盖方法与选择器'匹配:'具有不兼容的类型'([PlayingCard]) - > Int'
为什么???它的两个函数具有相同的名称但两种不同的参数为什么它仍然要求覆盖?如果我这样做,那么即使这被称为错误