预期 return 'Int' 的函数中缺少 return
Missing return in a function expected to return 'Int'
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
canvasCount { (value) in
if let res = value {
return res
}
} //Missing return in a closure expected to return 'Int'
} //Missing return in a closure expected to return 'Int'
Missing return in a closure expected to return 'Int'
func canvasCount(completion:@escaping((_ va:Int?) -> Int )) {
ref.child("Canvas").observeSingleEvent(of: .value, with: { (snapshot) in
completion( snapshot.children.allObjects.count)
}) { (error) in
print(error.localizedDescription)
completion(nil)
}
}
嗨,我希望能够 return snapshot.children.allObjects.count
作为一个整数。但是我用canvasCount
函数得到了这个错误"Missing return in a closure expected to return 'Int'"。任何人都可以帮助我吗?
您需要完成,因为对 firebase 的调用是异步的
func canvasCount(completion:@escaping((_ va:Int?) -> () )) {
ref.child("Canvas").observeSingleEvent(of: .value, with: { (snapshot) in
completion( snapshot.children.allObjects.count)
}) { (error) in
print(error.localizedDescription)
completion(nil)
}
}
canvasCount { (value) in
if let res = value {
print(res)
}
}
编辑: ------------------------------ --------------
声明一个实例变量
var counter = 0
里面viewDidLoad
插入
canvasCount { (value) in
if let res = value {
self.counter = res
self.tableView.reloadData()
}
}
然后复制那些
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return counter
}
func canvasCount(completion:@escaping((_ va:Int?) -> ())) {
ref.child("Canvas").observeSingleEvent(of: .value, with: { (snapshot) in
completion( snapshot.children.allObjects.count)
}) { (error) in
print(error.localizedDescription)
completion(nil)
}
}
您可以使用 completion
和 Int
来满足您的要求,
var canvasCount: Int?
func canvasCount(completion: @escaping (_ count: Int) -> Void) {
ref.child("Canvas").observeSingleEvent(of: .value, with: { (snapshot) in
completion(snapshot.children.allObjects.count)
}) { (error) in
print(error.localizedDescription)
completion(nil)
}
}
//Get the result here
//Use weak self to avoid retain cycle
canvasCount { [weak self] (count) in
if let count1 = count {
self?.canvasCount = count1
DispatchQueue.main.async {
self?.tableView.reloadData()
}
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return canvasCount
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
canvasCount { (value) in
if let res = value {
return res
}
} //Missing return in a closure expected to return 'Int'
} //Missing return in a closure expected to return 'Int'
Missing return in a closure expected to return 'Int'
func canvasCount(completion:@escaping((_ va:Int?) -> Int )) {
ref.child("Canvas").observeSingleEvent(of: .value, with: { (snapshot) in
completion( snapshot.children.allObjects.count)
}) { (error) in
print(error.localizedDescription)
completion(nil)
}
}
嗨,我希望能够 return snapshot.children.allObjects.count
作为一个整数。但是我用canvasCount
函数得到了这个错误"Missing return in a closure expected to return 'Int'"。任何人都可以帮助我吗?
您需要完成,因为对 firebase 的调用是异步的
func canvasCount(completion:@escaping((_ va:Int?) -> () )) {
ref.child("Canvas").observeSingleEvent(of: .value, with: { (snapshot) in
completion( snapshot.children.allObjects.count)
}) { (error) in
print(error.localizedDescription)
completion(nil)
}
}
canvasCount { (value) in
if let res = value {
print(res)
}
}
编辑: ------------------------------ --------------
声明一个实例变量
var counter = 0
里面viewDidLoad
插入
canvasCount { (value) in
if let res = value {
self.counter = res
self.tableView.reloadData()
}
}
然后复制那些
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return counter
}
func canvasCount(completion:@escaping((_ va:Int?) -> ())) {
ref.child("Canvas").observeSingleEvent(of: .value, with: { (snapshot) in
completion( snapshot.children.allObjects.count)
}) { (error) in
print(error.localizedDescription)
completion(nil)
}
}
您可以使用 completion
和 Int
来满足您的要求,
var canvasCount: Int?
func canvasCount(completion: @escaping (_ count: Int) -> Void) {
ref.child("Canvas").observeSingleEvent(of: .value, with: { (snapshot) in
completion(snapshot.children.allObjects.count)
}) { (error) in
print(error.localizedDescription)
completion(nil)
}
}
//Get the result here
//Use weak self to avoid retain cycle
canvasCount { [weak self] (count) in
if let count1 = count {
self?.canvasCount = count1
DispatchQueue.main.async {
self?.tableView.reloadData()
}
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return canvasCount
}