Наша кодовая база по-прежнему является гибридной кодовой базой, но я пытался больше работать в Swift. К сожалению, я столкнулся со странной ситуацией, когда команда, которая отлично работает в Obj-C, абсолютно отказывается работать в Swift.
Я пытаюсь отправить файл из одного из наших настольных продуктов в другой из наших продуктов. Все схемы URL настроены правильно. Эта команда в Obj-C работает отлично:
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"ourotherapp://v1/import?filePath=/Users/gi.joe/Documents/test.wav"]];
Однако при попытке использовать версию Swift эта абсолютно отказывается выполняться. Без исключений, без подсказок, без ничего:
NSWorkspace.shared.open(URL(fileURLWithPath: "ourotherapp://v1/import?filePath=/Users/gi.joe/Documents/test.wav"))
Есть ли какая-то разница в том, как NSWorkspace
работает в Swift, в отличие от Obj-C? Я просмотрел документы Apple, но, может быть, я что-то пропустил?
Вауууууу. Я смотрел на это так много раз, что мои глаза были размыты, и я ВСЕ ЕЩЕ не уловил этого. Это проблема!
Я вижу, что вы пробовали два разных вызова в Obj C и Swift.
Я не пробовал приведенный ниже код, возможно, этот пример поможет вам:
if let checkURL = NSURL(string: "https://google.com") {
if NSWorkspace.shared().open(checkURL as URL) {
print("URL Successfully Opened")
}
} else {
print("Invalid URL")
}
После долгих размышлений оказалось, что вы правы! Это действительно два разных вызова. И я чувствую себя идиотом.
отлично у тебя есть решение!
Попробуй это:
guard let url = URL(string: "someURL") else { return }
UIApplication.shared.open(url)
Извините - я указал в теге, но, похоже, я забыл упомянуть в теле вопроса, что это macOS, а не iOS. Хотя, оказывается, концепция правильная. Я использовал неправильный параметр — это должно было быть string
, а не fileURLWithPath
.
Я думаю, что аналог
URL(fileURLWithPath:)
в ObjC — это[NSURL fileURLWithPath:]
, а не[NSURL URLWithString:]
, поэтому технически эти два вызова не эквивалентны.