Я полагаю, что ответ касается того, совместим ли тип URL в следующей функции с любым типом, передаваемым в него.
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool
Код ниже работает без ошибок. Взгляните на URL (fileURLWithPath:)
... let swiftRange = Range(rangeBetweenQuotes, in: strings)!
let link:String = String(strings[swiftRange])
let link2 = URL(fileURLWithPath: link)
attributedString.addAttribute(.link, value: link2, range: rangeBetweenQuotes)
Ошибка, которую я продолжал получать, не возникла из-за ошибки при выполнении функции addAttribute параметр значение , которая принимает Любой тип объекта. При отладке ошибки я обнаружил, что параметр значение в addAttribute содержит строковое значение, которое я передал в него. Как уже упоминалось выше, проблема возникла в функции:
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool
, который принимает URL. Пока я пытался преобразовать строковый тип link в URL, используя
URL(string:"")
преобразование не сработало. Я продолжал получать нулевое значение, которое, конечно, выдавало ошибку при нажатии на ссылку. Тем не менее, я могу безопасно передать переменную в параметр shouldInteractWith URL: URL , когда переменная типа строки
преобразуется в URL с использованием:
URL(fileURLWithPath: link)
Я до сих пор не понимаю, почему shouldInteractWith URL: URL принимает строковый литерал, тогда как String (string [swiftRange]), supra , не работает. Есть мысли?
РЕДАКТИРОВАТЬ ... дальнейшее объяснение
Я знаю ответ, почему URL type принимает один строковый литерал, а другой - нет. Допустимый тип URL не может содержать пробел в строке. URL (fileURLWithPath:) работает, потому что он заполняет пустое пространство% 20.
Надеюсь, это поможет кому-то в будущем.