我查看了很多博客,并尝试了很多东西让我的Swift单元测试在Xcode 6.0.1(或者6.1)中工作.我正在尝试访问应用程序目标中的类,所以我写了这一行:
var vc: LoginViewController!
Run Code Online (Sandbox Code Playgroud)
当然,我得到"使用未声明的类型'LoginViewController'"错误.
然后我尝试添加LoginViewController到我的测试目标,但随后我在项目中的其他类上"使用了未解析的标识符"错误.所以我尝试将这些类添加到我的测试目标中,但我最终得到了一个看似无穷无尽的错误来源,如下面的截图:

将我的所有课程声明为公开课程会导致其他错误,这似乎是不好的做法.无论如何,在依赖于许多框架和类的Swift项目中包含单元测试?我只想从与本文中的代码完全相同的内容开始.
我正在使用DEVELOPMENT-SNAPSHOT-2016-06-06-aSwift 的版本.我似乎无法绕过这个问题,我已尝试@noescape在各个地方使用,但我仍然有以下错误:
闭包不能隐式捕获变异的自身参数
为了更好地解释,这是一个简单的例子:
public struct ExampleStruct {
let connectQueue = dispatch_queue_create("connectQueue", nil)
var test = 10
mutating func example() {
if let connectQueue = self.connectQueue {
dispatch_sync(connectQueue) {
self.test = 20 // error happens here
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些Swift二进制文件中的某些东西必须已经改变,现在导致我以前工作的代码中断了.我想避免的一种解决方法是使我的结构体成为一个类,这有助于解决问题.如果还有其他方法,请告诉我.
有没有办法手动并立即刷新Firebase缓存,使用iOS SDK,下拉最新数据(假设您在线)?例如,如果我对Firebase上的数据进行了一些更改,我希望我的应用能够立即反映出来,但是在启用持久性的情况下,通常需要重新启动应用.
我最近在我的应用程序中启用了持久性,如下所示:
Firebase.defaultConfig().persistenceEnabled = true
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但现在我的应用程序即使使用互联网连接也不会经常刷新它的数据.我正在使用这里提到的离线功能.
所以我试图让Core Location中的CLFloor给我数据,而不是在Swift中返回nil,但是我无法做到.我已经尝试了自己的代码和来自NSHipster的以下代码:
import CoreLocation
class LocationManagerDelegate: NSObject, CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {
let location: CLLocation? = locations[0] as? CLLocation
if let floor: CLFloor? = location?.floor {
println("Current Floor: \(floor?.level)")
}
}
}
let manager = CLLocationManager()
manager.delegate = LocationManagerDelegate()
manager.startUpdatingLocation()
Run Code Online (Sandbox Code Playgroud)
有人知道如何在设备或模拟器上完成这项工作,我相信答案会让很多人受益.如果有人知道这个或CLVisit的任何好资源,这也会有所帮助.