Я пытаюсь загрузить файл из моего пакета приложений в Swift 3, и я наткнулся на странную ситуацию с помощью метода ввода типа Swift. Если я использую следующий код, я получаю сообщение об ошибке в третьей строке, которая говорит Value of optional type "String?" not unwrapped
.Swift Impossible Type Inference
let url = NSURL(fileURLWithPath:Bundle.main.bundlePath)
let url2 = url.appendingPathComponent("foo.txt")
let path:String = url2?.path
Чтобы исправить ошибку я развернет значение на третьей линии, изменив его:
let path:String = url2?.path!
теперь я получаю ошибку Cannot force unwrap value of a non-optional type 'String'
. Кажется, что Swift не может определить, является ли свойство пути String
или String?
. Функция автозаполнения в Xcode говорит, что это String
, но документы говорят, что это String?
.
Предлагаемое исправление по Xcode для первой ошибки состояло в том, чтобы заменить url2?.path
на (url2?.path)!
, который, в конечном итоге, закончился, но я понятия не имею, почему это работает, а другие - нет.
let path:String = (url2?.path)!
Что происходит? Является ли это умозаключение ошибка типа в Swift, или я что-то отсутствует супер очевидное
'пусть fooBundleURL = Bundle.main.bundleURL.appendingPathComponent ("foo.txt")' ' –
пусть fooPath = fooBundleURL.path' –
@LeoDabus Я согласен, что работает, но мой вопрос в том, почему предоставленный код не работает. – Aderis