转换 String 或 NSUrl 以便在 UIActivityViewController 中使用

Convert String or NSUrl in order to use in UIActivityViewController

我对可选项、AnyObjects 和字符串有点迷茫。我有一个应用程序,我只想在按下按钮时打开 ActivityController。给定 URL,然后应该会出现几个共享 URL 的选项。 我找不到它的工作方式,要么 Xcode 说它不能转换为 AnyObject,要么我得到的是 nil。

这样做的正确方法是什么? 我目前拥有的:

let data = snap.value as! [String : AnyObject] //Getting a snapshot from Firebase

let dataurl = data["url"] as! String //Prefix is url, this gives just the URL
let dataurlstring = NSURL(string: dataurl!)

let activityVC = UIActivityViewController(activityItems: dataurlstring, applicationActivities: nil)

你能试试这个吗,让我知道它是否适合你?这不是一个正确的答案,只是一个修复它的起点:

func showAlert(with snapValues: [String: AnyObject]?) {
    guard let snapValues = snapValues, let dataurl = snapValues["url"] as? String, let dataurlstring = NSURL(string: dataurl) else {
        return
    }

    let activityVC = UIActivityViewController(activityItems: [dataurlstring], applicationActivities: nil)
    //Continue to show the alert or return the object activityVC 
}

这样称呼它:

let snapValues = snap.value as? [String : AnyObject]
showAlert(with: snapValues)

如果你想避免函数中的可选参数改变代码如下:

  1. 函数:

    func showAlert(with snapValues: [String: AnyObject]) {
        guard let dataurl = snapValues["url"] as? String, let dataurlstring = NSURL(string: dataurl) else {
                return
        }
        ....
    }
    
  2. 通话:

    if let snapValues = snap.value as? [String : AnyObject] {
        showAlert(with: snapValues)
    }