问题是当我执行以下操作时
对于对象中的对象 { 例如:....
// [AnyObject] 没有名为生成器的成员 - 它向我显示 这个错误
}
在 stackoverflow 和其他一些网站搜索之后,我这样做了:
if objects?.count > 0 {
for object in objects! {
self.resultsUsernameArray.append(object.username) -> The error is "Cannot invoke append with an argument list of type (String?!)"
}
} else {
}
[AnyObject]
没有名为generator || 的成员无法使用 (String?!)
类型的参数列表调用追加
import UIKit
var userName = ""
class UsersViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var resultsTable: UITableView!
var resultsUsernameArray = [String]()
var resultsProfileNameArray = [String]()
var resultsImageFiles = [PFFile]()
override func viewDidLoad() {
super.viewDidLoad()
let theWidth = view.frame.size.width
let theHeight = view.frame.size.height
resultsTable.frame = CGRectMake(0, 0, theWidth, theHeight - 64)
userName = PFUser.currentUser()!.username!
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let predicate = NSPredicate(format: "username !="+userName+"'")
var query = PFQuery(className: "_User", predicate: predicate)
var objects = query.findObjects()
for object in objects { // [AnyObject] does not have a member named generator
self.resultsUsernameArray.append(object.username)
self.resultsProfileNameArray.append(object["profileName"] as! String)
self.resultsImageFiles.append(object["photo"] as! PFFile)
resultsTable.reloadData()
}
}
func tableView(tableView: UITableView, numberOfRowsInSection eg..... {
}
query.findObjects()
产生 [AnyObject]?
(即 optional
可能是 [AnyObject]
)。因此,如果 query.findObjects()
的结果是 nil
,则它不符合 Generator
协议。所以,首先检查你的结果是否为零,然后解开它。
关于
self.resultsUsernameArray.append(object.username)
的另一个问题是 object
现在是 AnyObject
并且它没有属性名称 username
。您首先需要将 object
转换为 PFUser
,然后使用 username
属性。
var objects = query.findObjects()
if objects != nil { // or use objects.count > 0
for object in objects! {
if let user = object as? PFUser {
resultsUsernameArray.append(user.username!)
...
}
}
}
试试这个
if let username = object.username as String! {
self.resultsUsernameArray.append(username)
}