2016-03-14 18 views
5

Tôi đang viết một ứng dụng đơn giản đọc tệp CSV trong Swift và tôi muốn có thể sử dụng cùng một mã trong Playground và dưới dạng tệp đầu vào cho lệnh swift .Cách xác định xem mã Swift có đang chạy bên trong XCode Playground

Để đọc một tập tin trong sân chơi tôi phải sử dụng mã này

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

Tôi muốn đạt được cái gì đó như:

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

tôi nghĩ rằng bạn có thể sử dụng nhận dạng theo gói để xác định bạn 'runni Trong sân chơi - như tôi nhớ lại nó giống như 'com.apple.?. playground'. – Michael

Trả lời

3

Bài kiểm tra là khá đơn giản:

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

Nhưng tôi nghĩ rằng bạn đã nhìn thấy vấn đề một khi bạn đã làm điều đó ... việc nhập khẩu sẽ dừng xây dựng ở nơi khác. Tôi nghi ngờ bạn đang cố gắng để xây dựng một sân chơi cho một khuôn khổ bạn đã xây dựng (nếu không, tôi không hoàn toàn chắc chắn như thế nào mã đang được chia sẻ) ... Cách tôi giải quyết nó trong khuôn khổ là cung cấp một cuộc gọi tùy chọn trở lại treo cho giá trị tôi muốn để có được ... do đó, ví dụ

Trong khung

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

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

Trong sân chơi

import XCPlayground 
import YourFramework 

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

//Do your thing.... 
Các vấn đề liên quan