【问题标题】:Cannot invoke 'append' with an argument list of type '(String?!)'无法使用类型为“(字符串?!)”的参数列表调用“附加”
【发布时间】:2015-04-20 19:30:42
【问题描述】:

我正在尝试将 Parse 中的用户名添加到一个数组中以在 UITableView 中显示它们,但是当我将用户名附加到我的数组时出现错误。

我得到的错误是:无法使用类型为“(字符串?!)”的参数列表调用“附加”

我做错了什么?

var usernames = [""]

func updateUsers() {      
    var query = PFUser.query()
    query!.whereKey("username", notEqualTo: PFUser.currentUser()!.username!)
    var fetchedUsers = query!.findObjects()

    for fetchedUser in fetchedUsers! {
        self.usernames.append(fetchedUser.username)
    }
}

【问题讨论】:

  • 这样声明数组怎么样:var usernames:[String] = []

标签: swift parse-platform


【解决方案1】:

我解决了我的问题。我将数组声明为空数组,并使用以下代码解包可选:

var usernames = [String]()

self.usernames.removeAll(keepCapacity: true)

    for fetchedUser in fetchedUsers! {
        if let username = fetchedUser.username as String! {
            self.usernames.append(username)
        }
    }

【讨论】:

    【解决方案2】:

    PFUser.username 是一个可选项,您不能在 Swift 中将可选项附加到 String 数组中。这是因为可选的可以是nil,而Swift中的String数组只接受字符串。

    您需要强制解开可选项,或者使用 if-let 语法来添加它(如果存在)。

    强制展开

    self.usernames.append(fetchedUser.username! as String)
    

    或者如果-让

    if let name = fetchedUser.username as? String {
      self.usernames.append(name)
    }
    

    另外,正如 NRKirby 在您的问题的 cmets 中提到的那样,您可能希望以不同的方式初始化 usernames 数组。目前第一个元素是一个空字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多