Module compiled with Swift 3.0.2 cannot be imported in Swift 3.2.2 の対策
Realm入門という本の「06_モデルオブジェクトの生成と初期化」の下記サンプルコードをダウンロードして使おうとXcode9.1で開いた所、エラーが出て前に進めません。解決方法を御教示頂けないでしょうか。
エラー内容
「ModelCreationのViewController.swift/import RealmSwift」のところに「Module compiled with Swift 3.0.2 cannot be imported in Swift 3.2.2」
試したこと
ネットで探して以下の4点を試しました。
①「carthage bootstrap --platform iOS --no-use-binaries」
(結果→-bash: carthage: command not found)
②$ brew update/$ brew install carthageをやった(結果→ command not found。)
③Carthage.pkg をダウンロードしてインストール後に①(結果→ command not found。)
④build holderのクリーン後に①(結果→ command not found。)
環境 MacBookPro HighSierra10.13.1 Xcode9.1
import UIKit
import RealmSwift
class Person: Object {
dynamic var name = ""
dynamic var age = 0
dynamic var dog: Dog? // Dogモデルと1対1の関連
let cats = List<Cat>() // Catモデルと1対多の関連
}
class Animal: Object {
dynamic var name = ""
dynamic var age = 0
}
class Dog: Animal {
}
class Cat: Animal {
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// MARK: - 6.2 生成と初期化する方法
print("6.2 生成と初期化する方法(p035)")
print("- ①生成後に各プロパティ値を設定する(p036)")
var dog = Dog()
dog.name = "Momo"
dog.age = 9
print("- ②キー値コーディング(KVC)に準拠しているオブジェクトで初期化する(p036)")
dog = Dog(value: ["name": "Momo", "age": 9]) // Dictionaryで初期化
print("- ③各プロパティの値の配列で初期化する(p036)")
dog = Dog(value: ["Momo", 9])
// MARK: - 6.3 ネストしたモデルオブジェクトの生成と初期化
print("6.3 ネストしたモデルオブジェクトの生成と初期化(p037)")
let cat1 = Cat(value: ["Toto", 1])
let cat2 = Cat(value: ["Rao", 2])
print("- ①生成後に各プロパティ値を設定する(p037)")
var person = Person()
person.name = "Yu"
person.age = 32
person.dog = dog
person.cats.append(objectsIn: [cat1, cat2])
print("- ②キー値コーディング(KVC)に準拠しているオブジェクトで初期化する(p037)")
person = Person(value: ["name": "Yu",
"age": 32,
"dog": ["name": "Momo", "age": 9],
"cats": [["name": "Toto", "age": 1],
["name": "Rao", "age": 2]]])
// Objectもキー値コーディングに準拠しているので初期化に使用できます。
person = Person(value: ["name": "Yu",
"age": 32,
"dog": dog,
"cats": [cat1, cat2]])
print("- ③各プロパティの値の配列で初期化する(p038)")
person = Person(value: ["Yu",
32,
dog,
[cat1, cat2]])
// オプショナル型やListクラス内の要素がない場合でも、配列内の値を省略することはできません。
// 値がない場合はnilを指定する必要があります。
person = Person(value: ["Yu",
32,
nil,
nil] as [Any?])
// 例えば次のコードはオプショナル型とList型に対しての要素がないためクラッシュする。
// person = Person(value: ["Yu", 32]) // ← 実行すると例外が発生しクラッシュ
}
// MARK: - Util
@IBOutlet weak var textView: UITextView!
func print(_ string: String) {
Swift.print(string)
if textView.text.characters.count > 0 {
textView.text = textView.text.appending("\n")
}
textView.text = textView.text.appending(string)
}
}