2016-04-06 41 views
0

我对学习Swift仍然很陌生。我回顾其中有人建议我需要解开任何自选其他几个职位,我相信我已经这样做了,但我仍然得到错误的解释如下:无法将类型'(User) - > Dictionary <String,String>'的值转换为期望的参数类型'Dictionary <String,String>'

下面给出

let user = User(uid: authData.uid! , email: email!, firstName: firstName!, 
     lastName: lastName!, provider: authData.provider!) 

let userDictionary = User.getUserDictionary(user) 

// Add new account to the Firebase database 

UserAccountService.firebaseDBService.createNewAccount(authData.uid, user: userDictionary) 
的代码片段

上线获取错误

Cannot convert value of type '(User) -> Dictionary<String, String>' to 

expected argument type 'Dictionary<String, String>'

UserAccountService.firebaseDBService.createNewAccount(authData.uid, user: userDictionary)

功能:

func createNewAccount(uid: String, user: Dictionary<String, String>) { 

    // A User is born. 

    USER_REF.childByAppendingPath(uid).setValue(user) 
} 

User.swift:

import Foundation 
import Firebase 

class User: NSObject { 

    let uid: String 
    let email: String 
    let firstName: String 
    let lastName: String 
    let provider: String 

    // Initialize from Firebase 
    init(authData: FAuthData, firstName: String, lastName: String) { 
     self.uid = authData.uid! 
     self.email = authData.providerData["email"] as! String 
     self.firstName = firstName 
     self.lastName = lastName 
     self.provider = authData.provider! 
    } 

    // Initialize from arbitrary data 
    init(uid: String, email: String, firstName: String, lastName: String, provider: String) { 
     self.uid = uid 
     self.email = email 
     self.firstName = firstName 
     self.lastName = lastName 
     self.provider = "" 
    } 

    // Return a Dictionary<String, String> from User object 
    func getUserDictionary(user: User) -> Dictionary<String, String> { 
     //let provider = user.provider as String! 
     let email = user.email as String! 
     let firstName = user.firstName as String! 
     let lastName = user.lastName as String! 
     let userDictionary: [String : String] = [ 
      "provider" : user.provider as String!, 
      "email" : email, 
      "firstName" : firstName, 
      "lastName" : lastName 
     ] 
     return userDictionary 
    } 
} 
+2

它应该是'let userDictionary = user.getUserDictionary()'。代码区分大小写,你试图调用类的方法而不是你创建的实例。 – dan

+0

谢谢!我现在看到了我的愚蠢的错误。我花了几个小时盯着这个,并没有听清楚。谢谢! – Jace

回答

1

User需求是一个小写的 'U' 当你调用getUserMethod,你指的是你的用户类的实例而不是User类本身。它应该看起来像这样:

let user = User(uid: authData.uid! , email: email!, firstName: firstName!, 
    lastName: lastName!, provider: authData.provider!) 

//CHANGE HERE: lowercase u on user 
let userDictionary = user.getUserDictionary(user) 

看看是否有帮助。

+0

谢谢!我现在看到了我的愚蠢的错误。我花了几个小时盯着这个,并没有听清楚。谢谢! – Jace

+0

这将是伟大的,如果你可以把它标记为接受,谢谢:) –

1

功能你使用

User.getUserDictionary(user) 

实际上是类用户的方法。

因此,这意味着您需要在您实例化的类对象之一而不是类本身上调用该方法。

我不认为这个问题与可选的展开有关。

+0

谢谢!我现在看到了我的愚蠢的错误。我花了几个小时盯着这个,并没有听清楚。谢谢! – Jace

相关问题