我知道我可以用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 ...
在目标c中,我可以创建一个类数组并在方法中使用它
NSArray *classes = @[[NSAttributedString class]];
NSArray *items = [pasteboard readObjectsForClasses:classes
options:nil];
Run Code Online (Sandbox Code Playgroud)
但是,swift没有"类"功能.返回类的元类型会导致错误
let aClass : AnyClass! = NSAttributedString.self
//or let aClass:AnyClass! = NSAttributedString.classForArchiver()
let pasteboard = NSPasteboard.generalPasteboard()
let classes = [aClass]
let objects = pasteboard.readObjectsForClasses(classes, options: nil)
Run Code Online (Sandbox Code Playgroud)
最后一行导致"致命错误:数组元素无法桥接到Objective-C"
如何在Swift中创建类数组?
在Objective C中,每当我必须访问测试包时,我都会调用它
[NSBundle bundleForClass:[ClassInTestTarget class]];
Run Code Online (Sandbox Code Playgroud)
bundleForClass
在Swift中不可用,那么如何访问测试包呢?
我需要这个的原因是,为了编写我正在研究的框架的测试,我必须使用内存核心数据堆栈.最初所有资源都包含在主目标和测试目标中,但之后我将所有这些测试帮助程序仅移动到测试目标,现在下面的代码返回nil,这导致我的所有测试失败
let modelURL = NSBundle.mainBundle().URLForResource("Model", withExtension: "momd")
Run Code Online (Sandbox Code Playgroud) 我一直在探索Apple的快速文档,现在我在这里问.
是否有关于Swift运行时的文档?
我读过The Swift Programming Language一书.https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11
我看过WWDC视频.https://developer.apple.com/videos/wwdc/2014/
我试过搜索Swifts编译器源代码或运行时库源代码.
但是我什么都没发现,除了几个实际上关于Obj-c Swift函数调配/运行时的问题
我的意思是,每个人都知道obj-c是如何工作的.isa指针,cmd,我们如何调用方法,动态绑定等.我们知道寄存器如何传递参数.我们可以使用MachOView来定义二进制中使用的所有方法和类.有很多关于obj-c运行时,开源运行时库的文档.Clang是开源的.但是迅速呢?
此信息存在于Objective-C的集中位置.我要求相当于Obj-C运行时库文档.