shouldInteractWith 方法中 "URL" 的错误
Bug with "URL" in shouldInteractWith method
我正在尝试使用此委托方法在 UITextView 中捕捉 YouTube URL 以在 Youtube 应用程序上打开它:
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
if URL.absoluthePath.contains("youtube.com"), let youtubeURL = URL(string: "youtube://" + id) {
UIApplication.shared.open(youtubeURL)
}
}
我有这个错误:
Cannot call value of non-function type 'URL'
因为 Xcode 认为我使用的是 'URL' 变量而不是 URL(string: "")!宣言
您可以使用Foundation.URL
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
if let youtubeURL = Foundation.URL(string: "youtube://" + id), URL.absoluteString.contains("youtube.com") {
UIApplication.shared.open(youtubeURL)
}
}
您的代码中有 3 个问题,但首先这是 Apple 的一个非常糟糕的命名。内部参数标签应为 url
(小写)。但是由于内部参数标签是任意的,您可以自己将签名更改为
func textView(_ textView: UITextView,
shouldInteractWith url: URL,
in characterRange: NSRange,
interaction: UITextItemInteraction) -> Bool {
其他问题是:
- 您必须 return 一个
Bool
值。
URL
里面没有APIabsoluthePath
,你是说absoluteString
更有效的域检查是使用 URL
的 host
参数
func textView(_ textView: UITextView, shouldInteractWith url: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
if url.host?.hasSuffix("youtube.com") == true, let youtubeURL = URL(string: "youtube://" + id) {
UIApplication.shared.open(youtubeURL)
return true
}
return false
}
我正在尝试使用此委托方法在 UITextView 中捕捉 YouTube URL 以在 Youtube 应用程序上打开它:
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
if URL.absoluthePath.contains("youtube.com"), let youtubeURL = URL(string: "youtube://" + id) {
UIApplication.shared.open(youtubeURL)
}
}
我有这个错误:
Cannot call value of non-function type 'URL'
因为 Xcode 认为我使用的是 'URL' 变量而不是 URL(string: "")!宣言
您可以使用Foundation.URL
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
if let youtubeURL = Foundation.URL(string: "youtube://" + id), URL.absoluteString.contains("youtube.com") {
UIApplication.shared.open(youtubeURL)
}
}
您的代码中有 3 个问题,但首先这是 Apple 的一个非常糟糕的命名。内部参数标签应为 url
(小写)。但是由于内部参数标签是任意的,您可以自己将签名更改为
func textView(_ textView: UITextView,
shouldInteractWith url: URL,
in characterRange: NSRange,
interaction: UITextItemInteraction) -> Bool {
其他问题是:
- 您必须 return 一个
Bool
值。 URL
里面没有APIabsoluthePath
,你是说absoluteString
更有效的域检查是使用 URL
的host
参数
func textView(_ textView: UITextView, shouldInteractWith url: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
if url.host?.hasSuffix("youtube.com") == true, let youtubeURL = URL(string: "youtube://" + id) {
UIApplication.shared.open(youtubeURL)
return true
}
return false
}