2016-03-14 11 views
5

Sto scrivendo una semplice applicazione che legge file CSV in Swift e mi piacerebbe poter usare lo stesso codice in Playground e come file di input per il comando swift .Come determinare se un codice Swift è in esecuzione all'interno di XCode Playground

Per leggere un file in Playground devo usare questo codice

let filePath = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv") 

vorrei realizzare qualcosa di simile:

#if PLAYGROUND 
import XCPlayground 
let filePath = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv") 
#else 
let filePath = NSURL.fileURLWithPath("data.csv") 
#endif 
+0

Penso che si possa utilizzare l'identificatore pacchetto per determinare voi 're runni ng nel parco giochi - come ricordo è qualcosa come "com.apple.". playground. – Michael

risposta

3

Il test è molto semplice:

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

Ma penso che tu abbia già visto il problema una volta che l'hai fatto ... l'importazione fermerà la compilazione altrove. Sospetto che tu stia cercando di costruire un parco giochi per un framework che hai costruito (se non, non sono abbastanza sicuro di come viene condiviso il codice) ... Il modo in cui l'ho risolto nel framework era di fornire una chiamata opzionale gancio per il valore volevo arrivare ... così per esempio

Nel quadro

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

internal var defaultUrl : NSURL { 
    return defaultUrlHook?() ?? NSURL.fileURLWithPath("data.csv") 
} 

Nel parco giochi

import XCPlayground 
import YourFramework 

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

//Do your thing.... 
Problemi correlati