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

时间:2016-08-28 12:16:50

标签: swift uiactivityviewcontroller

我对选项,AnyObjects和Strings有点失落。我有一个应用程序,我只想在按下按钮时打开ActivityController。给定一个URL,然后会出现几个共享URL的选项。 我找不到它的工作方式,Xcode说它无法转换为AnyObject,或者我没有。

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

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)

1 个答案:

答案 0 :(得分:1)

你可以尝试一下,让我知道它是否适合你?这不是一个正确的答案,而只是一个解决它的起点:

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)
    }