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

时间:2016-03-14 22:23:20

标签: swift

我正在编写一个简单的应用程序,在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

1 个答案:

答案 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....