2016-08-28 2 views
1

Я немного потерян с опциями, AnyObjects и Strings. У меня есть приложение, где я просто хочу открыть ActivityController при нажатии кнопки. Учитывая URL-адрес, вы должны указать несколько вариантов совместного использования URL-адреса. Я не мог найти способ, пока он работает, либо Xcode говорит, что он не может преобразовать в AnyObject, или я получаю нуль.Преобразование String или NSUrl для использования в UIActivityViewController

Каков правильный способ сделать это? То, что я до сих пор:

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) 
+0

Вы можете вставить пример snap.value? –

+0

@MarcoSantarossa 'print (data) = [" url ": https://www.youtube.com/]' и 'print (dataurl) = Необязательный (" https://www.youtube.com/ ")' – ffritz

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

Я получаю сообщение об ошибке, что 'dataurlstring', являющийся NSURL, не может быть преобразован в ожидаемый' [AnyObject] 'в последняя строка. – ffritz

+0

@Warhost, пожалуйста, попробуйте мое редактирование –

+0

Спасибо, но теперь, когда я пытаюсь назвать это, я получаю, что snap.value является «AnyObject»? не может быть преобразован в ожидаемый '[String: AnyObject]?' – ffritz

Смежные вопросы