Как правильно вернуть значение?


#1

У меня есть данные на сервере (альбомы музыки), я делаю такой функционал что если есть новые альбомы то должен вернуть true а если нет то false

func checkNewAlbum2() -> Bool {
    
    let query = PFQuery(className: "Albums")
    
    query.findObjectsInBackgroundWithBlock { (objects, err) in
        if err == nil {
            if let parseAlbums = objects {
                let realmAlbums = self.realm.objects(Album)
                
                if realmAlbums.count < parseAlbums.count {
                    return true
                } else {
                    return false
                }
            }
        }
    }
}

Но у меня выходит ошибка

Unexpected non-void return value in void function

Как правильно вернуть значение?


#2

Из замыкания вы ничего не вернёте, вызывайте метод.


#3

Как? Можете подробнее написать? Спасибо.


#4

Как то так:

var realmAlbum = [Any]()

func checkNewAlbum2() {
    let query = PFQuery(className: "Album")
    query.findObjectsInBackground { objects, error in
        if let albums = objects, albums.count > self.realmAlbum.count {
            self.addAlbums(albums)
        }
    }
}

func addAlbums(_ albums: [Any]) {
    realmAlbum += albums
}

#5

Мне просто надо чтобы он отвечал true или false


#6

Замыкание выполняться позже по времени оно не может return (отвечать).

Можете передавать Bool в метод:

func checkNewAlbum2() {
    let query = PFQuery(className: "Album")
    query.findObjectsInBackground { objects, error in
        if let albums = objects, albums.count > self.realmAlbum.count {
            self.newAlbums(true)
        }
    }
}
func newAlbums(_ new: Bool) {
}

#7

Или сделать completionHandler чтобы он возвращал true или false?


#8

Это уже как вам удобнее :slight_smile:


#9

Можете выложить полный код, который у Вас получился, чтобы можно было видеть конечный результат?