2015-05-13 1 views
0

Я начинаю попробовать область с быстрым и иметь некоторые основные трудности.Невозможно вызвать max со списком аргументов типа String

Это моя модель:

class Alarm: Object { 
    dynamic var id: Int = 0 
    dynamic var name: String! 
    dynamic var date: NSDate! 

    override static func primaryKey() -> String? { 
     return "id" 
    } 
} 

Теперь я хочу, чтобы вычислить nextId для сохранения записи. Я пишу что-то вроде этого:

let nextId = realm.objects(Alarm).max("id") 

Но XCode бросает мне ошибку:

Cannot invoke 'max' with an argument list of type '(String)'.

Что я делаю не так?

+0

Это объявление функции в RealmSwift: public func max (свойство: String) -> U? , Он действительно требует строкового параметра – Peacemoon

+0

ok, тогда мой плохой. – Craicerjack

ответ

3
let nextId = realm.objects(Alarm).max("id") as Int? 

Вы должны сказать Swift, что возвращаемый тип max() должен быть на месте вызова, так как она меняется в зависимости от типа собственности, что вы называете в параметре строки. Это должно быть Int?, а не только Int, потому что нет максимума, если объектов нет.

+0

спасибо за хорошо объясненный ответ. Swift иногда не так очевидно – Peacemoon

+0

Как бы это сделать с помощью 'Int64'? Я получаю ошибку _ Не могу отличить значение типа '__NSCFNumber' до 'Swift.Int64'_, когда я использую 'Int64' – TimSim

+0

Я использую Realm 2.4.1, и у меня есть следующая строка:' let sum: Int? = self.currentDay? .periods.sum (ofProperty: «шаги») как? Int' И я получаю эту ошибку, есть кто-то, кто может сообщить мне об ошибке: Общий параметр 'U' не может быть выведено Периоды - это список царств – Kimdv