Swift Playground - Файлы недоступны для чтения

Файлы не читаются в Swift Playground.

Как сделать файлы доступными для чтения?

Тот же код хорошо работает на терминальном приложении Xcode, но не работает на Swift Playground.

Демо-код ниже.

import Foundation

println("Hello, World!")

var fname:String = "/Users/holyfield/Desktop/com.apple.IconComposer.plist"
var fm:NSFileManager = NSFileManager.defaultManager()

if(fm.fileExistsAtPath(fname)){
    println("File Exists")
    if(fm.isReadableFileAtPath(fname)){
        println("File is readable")
        var fd:NSData? = NSData(contentsOfFile: fname)
        println(fd?.length)
        let pl = NSDictionary(contentsOfFile: fname)
        println(pl?.count)
        println(pl?.allKeys)
    }else{
        println("File is not readable")
    }
}
else{
    println("File does not exists")
}

Образцы изображений:

XCode Terminal AppSwift Playground

Ответ 1

Я должен поблагодарить Нейта Кука за его быстрый ответ и твердый ответ.

Только для случая я разделяю его ответ с другого сообщения, название которого вводит в заблуждение.

См. ответ Nate здесь: fooobar.com/questions/451604/...

Игровые площадки изолированы песочницей, поэтому вы не сможете просто захватывать файлы из любой папки своего пользователя. Здесь, как добавить этот файл в свой игровая площадка, чтобы сделать ее доступной:

  • Найдите свой файл ".playground" в Finder Щелкните правой кнопкой мыши и выберите "Показать содержимое пакета"
  • Вы должны увидеть "timeline.xctimeline", "content.xcplayground" и "section-1.swift"
  • Создайте новую папку под названием " Ресурсы", если она еще не существует.
  • Скопируйте файлы в папку Ресурсы.

Кажется, что нет доступа к файлам с Swift Playground вне песочницы Playground. Если вы знаете, как обращаться к файлам вне песочницы, вы можете поделиться своим решением!

Show Package Contents

Resources Folder

Ответ 2

Существует несколько способов загрузки файлов на Swift Playground. Я расскажу о методах изображения, меню "Файл" и "Контекстное меню".

Изображение Литеральная техника

Это самый простой и холодный. Вы просто перетаскиваете файл из любого места на свой компьютер в код и назначаете его с помощью инструкции let или var. GIF здесь. введите описание изображения здесь

Техника меню файла

Выберите File -> Add Files to "MyProjectName"

См. GIF здесь.

Техника контекстного меню

Вы можете показать текущую игровую площадку в Навигаторе проектов Xcode (7.3.1), используя меню правой кнопки мыши. После открытия текущей игровой площадки вы увидите каталог "Ресурсы". Просто перетащите файл, который хотите получить в эту папку, и посмотрите, как происходит волшебство (учитывая, что вы написали код доступа к файлу).

Пример кода загрузки ресурса

Вот пример этого для показа изображения:

let url: NSURL! = NSBundle.mainBundle().URLForResource("IMG_4099", withExtension: "JPG")
let imagePath = url.path
let image = UIImage(contentsOfFile: imagePath!)
let imageView = UIImageView.init(image: image)

Я создал анимированный GIF который демонстрирует это в действии. Здесь проскальзывает из этого: введите описание изображения здесь

Чтение внешнего кода

Если вы хотите добавить дополнительный код в дополнение к ресурсам, использовать папку "Источники" .

Заметка о консоли

Консольная область интерфейса Xcode Playground покажет вам, что экземпляр UIImage nil при загрузке файла изображения вне песочницы. Если вы ввели путь, который, как вы знаете, существует, но изображение не отображается, убедитесь, что экземпляр UIImage не печатает как nil.

Ответ 3

Вы также можете создавать и использовать папку данных Shared Playground. Просто так:

/Users/имя пользователя /Documents/Shared Playground Data/file.txt

И любой файл, расположенный там, становится читаемым для любой детской площадки!