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

5

我正在使用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

我认为您可以使用捆绑标识符来确定您是否在Playground中运行 - 我记得它类似于com.apple.?.playground - Michael
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接