有没有办法在swift中打印变量的运行时类型?例如:
var now = NSDate()
var soon = now.dateByAddingTimeInterval(5.0)
println("\(now.dynamicType)")
// Prints "(Metatype)"
println("\(now.dynamicType.description()")
// Prints "__NSDate" since objective-c Class objects have a "description" selector
println("\(soon.dynamicType.description()")
// Compile-time error since ImplicitlyUnwrappedOptional<NSDate> has no "description" method
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我正在寻找一种方法来显示变量"很快"是类型ImplicitlyUnwrappedOptional<NSDate>,或至少NSDate!.
我有一个由数组组成的数组AnyObject.我想迭代它,并找到所有元素作为数组实例.
如何在Swift中检查对象是否属于给定类型?
我知道我可以用Swift检查var的类型 is
if item is Movie {
movieCount += 1
} else if item is Song {
songCount += 1
}
Run Code Online (Sandbox Code Playgroud)
但是如何检查两个实例是否具有相同的类?以下不起作用:
if item1 is item2.dynamicType {
print("Same subclass")
} else {
print("Different subclass)
}
Run Code Online (Sandbox Code Playgroud)
我可以轻松地添加一个"类"函数并在每个子类中更新它以返回一些独特的东西,但这看起来像一个kludge ...
我想检查数组的元素是否是Swift中UILabel的子类:
import UIKit
var u1 = UILabel()
u1.text="hello"
var u2 = UIView(frame: CGRectMake(0, 0, 200, 20))
var u3 = UITableView(frame: CGRectMake(0, 20, 200, 80))
var myArray = [u1, u2, u3]
var onlyUILabels = myArray.filter({"what to put here?"})
Run Code Online (Sandbox Code Playgroud)
没有桥接到目标c.
Swift是否与Objective-C相当@encode?
例如
@encode(void *) // -> @"^v"
Run Code Online (Sandbox Code Playgroud)
搜索没有产生任何结果.
在Swift中,我们不能再使用"self.class"了.
我想在NSObject的子类中为描述方法打印自己的类名.
我该如何打印?或者我应该为获取课程名称制作新方法?
我检查了以下问题,但我无法得到答案.
import UIKit
class PrintClassName: NSObject {
override init() {
super.init()
println("\(self.dynamicType)")
// Prints "(Metatype)"
println("\(object_getClassName(self))");
// Prints "0x7b680910 (Pointer)"
println("\(self.className)")
// Compile error!
println(PrintClassName.self)
// Prints "(Metatype)"
}
}
Run Code Online (Sandbox Code Playgroud)
2014.08.25后记
我查了一下这个问题.
但println(PrintClassName.self)打印"(元型)"
而且我想在不在源代码上编写类名的情况下获取类名.
我正在尝试在Swift中打印当前类的名称.更具体地说,我想实现以下输出:
myFunction() in ClassContainingTheFunction
Run Code Online (Sandbox Code Playgroud)
我的功能名称打印很好.这是我最接近打印类名和函数名称:
println("\(__FUNCTION__) in \(__FILE__)")
Run Code Online (Sandbox Code Playgroud)
版画
myFunction() in path/to/TheFile.swift
Run Code Online (Sandbox Code Playgroud)
和
println("\(__FUNCTION__) in \(object_getClassName(self))")
Run Code Online (Sandbox Code Playgroud)
版画
myFunction() in [mangled class name here]
Run Code Online (Sandbox Code Playgroud)
这两个都接近我想要的,但路径很长,与我在代码中看到的名称相比,受损的类名称可能非常难以理解.
我知道有很多关于如何使用Swift获取对象类型的问题.
我想找到类型的原因是我可以测试在单元测试中返回正确的东西.前提是如果有人改变它,测试将失败,我们将会更加小心.
Swift有一个is方法,它返回一个关于对象是否属于某种类型的布尔值.我想使用is,然后断言响应是真的.
正如此处所述(http://www.raywenderlich.com/74138/swift-language-faq)然而,并在实践中显示..这引发了一个错误:
错误:'是'测试总是如此
关键是它现在返回true ..我正在编写一个测试,以便始终如此.愚蠢的.
有关如何使用XCTest和swift测试响应类型的任何想法?
谢谢
我似乎无法找到一个返回Swift中对象类型的函数或方法.
如何在Swift中检索对象的类型或类?
我尝试使用Obj-C类,这显然不起作用.
在python中你有像type或者的东西isinstance
在Javascript中你有 constructor
我很快陷入了这个问题.假设我有一个对象,如何在swift中检查它是来自struct还是class.
swift ×10
ios ×4
class ×1
objective-c ×1
struct ×1
typechecking ×1
types ×1
unit-testing ×1
xctest ×1