如何确定Swift代码是否在XCode Playground中运行

Mac*_*iak 5 swift

我正在编写一个简单的应用程序,在Swift中读取CSV文件,我希望能够在Playground中使用相同的代码并将其作为swift命令的输入文件.

要在Playground中读取文件,我必须使用此代码

let filePath = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv")
Run Code Online (Sandbox Code Playgroud)

我希望实现以下目标:

#if PLAYGROUND
import XCPlayground
let filePath = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv")
#else
let filePath = NSURL.fileURLWithPath("data.csv")
#endif
Run Code Online (Sandbox Code Playgroud)

rou*_*ter 3

测试非常简单:

let bundleId = NSBundle.mainBundle().bundleIdentifier ?? ""
if bundleId.hasPrefix("com.apple.dt"){
        //... Your code
}
Run Code Online (Sandbox Code Playgroud)

但我认为一旦完成此操作,您就已经看到了问题...导入将停止其他地方的构建。我怀疑你正在尝试为你已经构建的框架构建一个游乐场(如果没有,我不太确定代码是如何共享的)...我在框架中解决它的方法是提供一个可选的回调挂钩我想要获得的值...例如

框架内

public defaultUrlHook : (()->NSURL)? = nil

internal var defaultUrl : NSURL {
    return defaultUrlHook?() ?? NSURL.fileURLWithPath("data.csv")
}
Run Code Online (Sandbox Code Playgroud)

在操场上

import XCPlayground
import YourFramework

defaultUrlHook = { ()->NSURL in 
      return XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv")
}

//Do your thing....
Run Code Online (Sandbox Code Playgroud)