

本に書いてあった下記のコードを実行するとRealmのRLMConstants.hというファイルに「'swift_name' attribute cannot
be applied to this
declaration」というエラーが出ます。ネットで探してもそれらしいのは見つかりません。解決方法を御教示いただけますでしょうか。  
参考にしている本は、「[ほんきで学ぶSwift+iOSアプリ開発入門](https://www.amazon.co.jp/%E3%81%BB%E3%82%93%E3%81%8D%E3%81%A7%E5%AD%A6%E3%81%B6Swift-
iOS%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-Swift2-Xcode7-iOS9%E5%AF%BE%E5%BF%9C/dp/4798142352)(ISBN-10:4798142352)」です。Realmは最新版です。xcodeは７.１です。

① ViewController.swiftのコード

[code]

    import UIKit
    import RealmSwift
    
    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
        @IBOutlet weak var tableView: UITableView!
    
        // デフォルトの Realm インスタンスを取得する
        let realm = try! Realm()
    
        // DB 内の日記データが格納されるリスト(日付新しいもの順でソート：降順)。以降内容をアップデートするとリスト内は自動的に更新される。
        let dataArray = try! Realm().objects(Diary).sorted("date", ascending: false)
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        // 入力画面から戻ってきた時に TableView を更新させる
        override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)
            tableView.reloadData()
        }
    
        // segue で画面遷移するに呼ばれる
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
            let inputViewController:InputViewController = segue.destinationViewController 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("id")! + 1
                }
    
                inputViewController.diary = diary
            }
        }
    
        // MARK: UITableViewDataSource プロトコルのメソッド
        // TableView の各セクションのセルの数を返す
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return dataArray.count
        }
    
        // 各セルの内容を返す
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            // 再利用可能な cell を得る
            let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")
    
            // Cellに値を設定する.
            let object = dataArray[indexPath.row]
            cell.textLabel?.text = object.title
            cell.detailTextLabel?.text = object.date.description
            return cell
        }
    
        // MARK: UITableViewDataSource プロトコルのメソッド
        // Delete ボタンが押された時の処理を行う
        func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
            if editingStyle == UITableViewCellEditingStyle.Delete {
                try! realm.write {
                    self.realm.delete(self.dataArray[indexPath.row])
                    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
                }
            }
        }
    
        // セルが削除が可能なことを伝える
        func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath)-> UITableViewCellEditingStyle {
            return UITableViewCellEditingStyle.Delete;
        }
    
        // 各セルを選択した時に実行される
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            performSegueWithIdentifier("cellSegue",sender: nil)
        }
    }
    
[/code]

②InputViewController.swiftのコード

[code]

    import UIKit
    import RealmSwift
    
    class InputViewController: UIViewController {
        @IBOutlet weak var titleTextField: UITextField!
        @IBOutlet weak var bodyTextView: UITextView!
    
        let realm = try! Realm()
        var diary: Diary!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // NavigationBar の戻るボタンを消す
            self.navigationItem.setHidesBackButton(true, animated:false);
    
            titleTextField.text = diary.title
            bodyTextView.text = diary.body
    
            // Do any additional setup after loading the view.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        @IBAction func save(sender: UIButton) {
            try! realm.write {
                self.diary.title = self.titleTextField.text!
                self.diary.body = self.bodyTextView.text
                self.diary.date = NSDate()
                self.realm.add(self.diary, update: true)
            }
    
            self.navigationController?.popViewControllerAnimated(true)
        }
    
        /*
        // MARK: - Navigation
    
        // In a storyboard-based application, you will often want to do a little preparation before navigation
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
        }
        */
    
    }
    
[/code]

③Diary.swiftのコード

[code]

    import RealmSwift
    class Diary: Object {
        dynamic var id = 0
    
        // タイトル
        dynamic var title = ""
    
        // 本文
        dynamic var body = ""
    
        /// 最終更新日時
        dynamic var date = NSDate()
    
        /**
         id をプライマリーキーとして設定
         */
        override static func primaryKey() -> String? {
            return "id"
        }
    }
    
[/code]


CC BY-SA 3.0
2017-10-16T14:40:03.760
38764
2017-10-18T04:15:09.083
2017-10-18T04:15:09.083
19879
question
swift realm
'swift name'属性はこの宣言に適用できません〜の解決法