Я абсолютный новичок в программировании GUI для OSX, поэтому, пожалуйста, будьте осторожны со мной.
Я пытаюсь провести несколько экспериментов с добавлением легких элементов GUI из appkit в CLI, поэтому я работаю надочень маленькая программа, которая берет содержимое PDF и сохраняет его в текстовом файле.
Вот код, который у меня есть
import AppKit
import Foundation
import Quartz
func helperReadPDF(_ filename: String) -> String {
let pdata = try! NSData(contentsOfFile: filename) as Data
let pdf = PDFDocument(data: pdata)
return pdf!.string!
}
func selectFile() -> URL? {
let dialog = NSOpenPanel()
dialog.allowedFileTypes = ["pdf"]
guard dialog.runModal() == .OK else { return nil }
return dialog.url
}
func getSaveLocation() -> URL? {
let sa = NSSavePanel()
sa.nameFieldStringValue = "Untitled.txt"
sa.canCreateDirectories = true
sa.allowedFileTypes = ["txt"]
guard sa.runModal() == .OK else { return nil }
return sa.url
}
let file = selectFile()?.path ?? ""
print("where to save?")
let dest = getSaveLocation()!
try! helperReadPDF(file).write(to: dest, atomically: true, encoding: .utf8)
(я знаю, что здесь много недиоматических вещей, таких как принудительное развертывание и бессмысленное преобразование URL-адресов в пути. У меня есть неясные причины...)
Таким образом, этот код в основном работает: когда я запускаю его из окна терминала с помощью swift guitest.swift
, он открывает окно выбора файлов, позволяет мне выбрать файл PDF, а затем всплывающее окно сохраненияи позвольте мне выбрать каталог, а затем сохраните извлеченный текст из PDF-файла в этот каталог.
Но это не позволит мне изменить имя файла.Я могу выделить «Untitled.txt», предоставленный по умолчанию, я даже могу поместить курсор в поле ... но он не реагирует на ввод с клавиатуры.
В этом предыдущем SO кто-то предложил добавить nameFieldStringValue
, чтобы сделать его редактируемым, но, как вы можете видеть из приведенного выше кода, я сделал это, и он не работает.
Я вижу из этого очень старого SO , что, по крайней мере в Objective-C-land, вы должны инициировать какой-то объект приложения, чтобы принимать ввод с клавиатуры.Это правда и сегодня на Свифт-ланде?(Несмотря на то, что по какой-то странной причине вы можете принять ввод с помощью мыши, ничего не делая ?!) Если да, то как мне здесь это сделать?
Редактировать: я получаю из комментариев к последнему предыдущему СО, что я связалчто это, вероятно, ужасная идея, и что если я хочу изучать программирование на графическом интерфейсе Mac, я должен сделать это тяжелым путем с XCode и раскадровками и всем остальным.Но не могли бы вы позволить мне делать это глупо, пытаясь научиться чему-то одному?(То есть, изучите предлагаемые API-интерфейсы GUI, не пытаясь одновременно изучить XCode и предпочтительный стиль архитектуры Apple.)
Спасибо!
(Swift 4.2 в последней версии OSX.Не использовать XCode вообще.)