我正在编写一个简单的应用程序,在Swift中读取CSV文件,我希望能够在Playground中使用相同的代码,并将其作为swift
命令的输入文件。
要在Playground中读取文件,我必须使用此代码
let filePath = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv")
我想实现类似的目标:
#if PLAYGROUND
import XCPlayground
let filePath = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv")
#else
let filePath = NSURL.fileURLWithPath("data.csv")
#endif
答案 0 :(得分:3)
测试非常简单:
let bundleId = NSBundle.mainBundle().bundleIdentifier ?? ""
if bundleId.hasPrefix("com.apple.dt"){
//... Your code
}
但是我认为你已经看到了问题,一旦你做到了......导入将停止其他地方的构建。我怀疑你正在尝试为你构建的框架构建一个游乐场(如果没有,我不太确定如何共享代码)......我在框架中解决它的方式是提供一个可选的回调钩子我想得到的值...例如
在框架中
public defaultUrlHook : (()->NSURL)? = nil
internal var defaultUrl : NSURL {
return defaultUrlHook?() ?? NSURL.fileURLWithPath("data.csv")
}
在游乐场
import XCPlayground
import YourFramework
defaultUrlHook = { ()->NSURL in
return XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv")
}
//Do your thing....