ios - 无法将类型 'NSURL.Type' 的值转换为预期的参数类型 'NSURL?'

标签 ios swift firebase swift2 xcode7

我正在尝试使用 swiftfirebase 构建聊天应用程序并收到此错误:下面是代码:我仍然不明白哪里出了问题!! 我也在使用 JSQMessageViewController

func sendMedia(picture: UIImage?, video: NSURL?) {
    print(picture)
    print(FIRStorage.storage().reference())
    if let picture = picture {
        let filePath = "\(FIRAuth.auth()!.currentUser?.uid)/\(NSDate.timeIntervalSinceReferenceDate())"
        print(filePath)
        let data = UIImageJPEGRepresentation(picture, 0.1)
        let metadata = FIRStorageMetadata()
        metadata.contentType = "image/jpg"
        FIRStorage.storage().reference().child(filePath).putData(data!, metadata: metadata) { (metadata, error) in
            if error != nil {
                print(error?.localizedDescription)
                return
            }
            let fileUrl = metadata!.downloadURLs![0].absoluteString
            let newMessage = self.messageRef.childByAutoId()
            let messageData = ["fileUrl": fileUrl, "senderId": self.senderId, "senderName": self.senderDisplayName, "MediaType": "PHOTO"]
            newMessage.setValue(messageData)
        }
    }else if let video = video {
        let filePath = "\(FIRAuth.auth()!.currentUser?.uid)/\(NSDate.timeIntervalSinceReferenceDate())"
        print(filePath)
        let data = NSData(contentsOfURL: video)
        let metadata = FIRStorageMetadata()
        metadata.contentType = "video/mp4"
        FIRStorage.storage().reference().child(filePath).putData(data!, metadata: metadata) { (metadata, error) in
            if error != nil {
                print(error?.localizedDescription)
                return
            }
            let fileUrl = metadata!.downloadURLs![0].absoluteString
            let newMessage = self.messageRef.childByAutoId()
            let messageData = ["fileUrl": fileUrl, "senderId": self.senderId, "senderName": self.senderDisplayName, "MediaType": "VIDEO"]
            newMessage.setValue(messageData)
        }

    }
}

}

extension ChatViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        print("Did finish picking")
        //get the image
        print(info)
        if let picture = info[UIImagePickerControllerOriginalImage] as? UIImage {
            let photo = JSQPhotoMediaItem(image: picture)
            messages.append(JSQMessage(senderId: senderId, displayName: senderDisplayName, media: photo))
            sendMedia(picture, video: nil)
        }
        else if let video = info[UIImagePickerControllerMediaURL] as? NSURL {
            let videoItem = JSQVideoMediaItem(fileURL: video, isReadyToPlay: true)
            messages.append(JSQMessage(senderId: senderId, displayName: senderDisplayName, media: videoItem))
            sendMedia(nil, video: NSURL)
        }
        self.dismissViewControllerAnimated(true, completion: nil)
        collectionView.reloadData()
    }
}  

如果错误与 NSURl 类型有关,我不知道如何修复它。

最佳答案

在这一行中:

sendMedia(nil, video: NSURL)

您正在将 NSURL 作为第二个参数 video 传递。 (记住 video: 只是一个参数标签。)

也许你需要把它写成:

sendMedia(nil, video: video)

关于ios - 无法将类型 'NSURL.Type' 的值转换为预期的参数类型 'NSURL?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807262/

相关文章:

iphone - cell.detaillabel 的文本未显示

swift - 在表格 View 单元格中显示弹出窗口

firebase - 如何在 Firebase 控制台中使用对象数组创建 Firestore 文档?

firebase - 是否可以在 Firebase 中只接受来 self 的应用的函数调用?

java - Android 中 RecyclerView 的 ValueEventListener 与 ChildEventListener

ios - bundleForClass 不返回框架包 iOS

iphone - 在 ios 应用程序的 dispatch_async 中可以创建的最大任务数是多少

ios - 捕获Firebase实时observeSingleEvent数据在首次调用时失败

ios - 使用自定义顺序在 MKMapview 中显示 MKAnnotationView?

ios - 错误 : "Type ' *' does not conform to protocol ' *'" using custom class and NSURLSession