

Swift2の本を参考に下記のコードをSwift4で作成したところ、idを付与する配列部分で次のエラーが出ています。解決法を教えていただけますか。  
＜エラー内容＞  
Cannot convert value of type 'String' to expected argument type '(Diary,
Diary) throws -> Bool'

＜エラー該当部分＞  
**_diary.id = dataArray.max(by: "id")! + 1_**

[code]

    import UIKit
    import RealmSwift
    
    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
        //segueで画面遷移するときに呼ばれる
        override func prepare(for segue: UIStoryboardSegue, sender: Any?){
            let inputViewController: inputViewController = segue.destination as! inputViewController
            if segue.identifier == "cellsegue"{
                let indexPath = self.tableView.indexPathForSelectedRow
                inputViewController.diary = dataArray[indexPath!.row]
    
            } else {
                let diary = Diary()
                diary.title = "タイトル"
                diary.body = "本文"
                if dataArray.count != 0 {
    
                    //エラー部分
                    ***diary.id = dataArray.max(by: "id")! + 1***
    
                }
                inputViewController.diary = diary
            }
        }
        //Cannot convert value of type 'String' to expected argument type '(Diary, Diary) throws -> Bool'
    
[/code]


CC BY-SA 3.0
2017-11-14T10:14:11.253
39571
2017-12-11T13:51:30.297
2017-12-11T13:51:30.297
19110
13657
question
swift realm swift4
Swift2のidを付与する配列の文がSwift4でエラー


使うメソッドが間違っています。`max(by:)`は標準ライブラリのメソッドでクロージャを引数にとり、コレクションの要素のうち、最大のものを返すメソッドです。

Realmの最大のプロパティを返す集計関数は、`max(ofProperty:)`です。その部分のコードは下記のように書く必要があります。

[code]

    diary.id = dataArray.max(ofProperty: "id")! + 1
    
[/code]


CC BY-SA 3.0
2017-11-14T11:05:35.747
39573
2017-11-14T11:05:35.747
5519
39571
answer