对 Swift 3.0 的领域支持
Posted
技术标签:
【中文标题】对 Swift 3.0 的领域支持【英文标题】:Realm support for Swift 3.0 【发布时间】:2016-06-16 14:10:44 【问题描述】:我想知道是否已经可以在 Swift 3.0 的 beta 版中使用 Realm。
虽然我在 Realm 存储库中看到了 RealmSwift-swift3.0 目录,但我没有成功正确使用它。我应该如何从源代码安装它?
【问题讨论】:
【参考方案1】:您可以将 Realm 与 Swift 3.0 一起使用,但要考虑到当前版本仍然是绝对实验性的。
您可以从 GitHub 克隆 realm-cocoa 存储库的 master 分支。
或者你可以使用迦太基:
github "realm/realm-cocoa.git" "master"
或者,如果您更喜欢 CocoaPods:
pod 'RealmSwift', :git => 'https://github.com/realm/realm-cocoa.git', :branch => 'master'
如果您使用 Carthage,请记住您必须手动添加 Realm 和 RealmSwift 框架(忽略 IBAnimatable 框架):
事实上,我有一个使用 Xcode 8、Swift 3 和 Realm 的项目,它运行良好 :)
【讨论】:
我真的需要master分支吗?当我使用 Carthage 导入此分支并导入 RealmSwift 时,我收到警告:模块文件是由旧版本的编译器创建的。这个分支已经用 XCode 8 编译了吗?sudo xcode-select -switch /Applications/Xcode-beta.app/Contents/Developer
是我用来将默认命令行工具更改为 Xcode 8 的命令。在使用 carthage update
之前执行此操作并告诉我它是否有效。
是的,它有效!但是,我觉得 Swift 3.0 的问题太多了,所以我认为我需要等待发布。例如,Swift 似乎不允许将array.appendContentsOf(realm.objects(Label))
更改为array.append(contentsOf: realm.allObjects(ofType: Label))
。还有很多其他问题
在上面的示例中,您需要将Label
更改为Label.self
以获取要编译的代码。不幸的是,这是 Swift 3 的变化,Realm 无法控制。
需要使用两个pod来保证使用master:pod 'RealmSwift', :git => 'https://github.com/realm/realm-cocoa.git', :submodules => true
pod 'Realm', :git => 'https://github.com/realm/realm-cocoa.git', :submodules => true
【参考方案2】:
从 1.1.0 版本开始,Realm 正式兼容 Swift 3.0/Xcode 8.0。见here。
此版本带来了对 Xcode 8、Swift 2.3 和 Swift 的官方支持 3.0。预构建框架现在使用 Xcode 7.3.1 和 Xcode 8.0 构建。
这是安装文档的摘录:
如果使用 Xcode 8,请将以下内容粘贴到 Podfile 的底部, 必要时更新 Swift 版本:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '2.3' # or '3.0' end end end
【讨论】:
【参考方案3】:Realm 发布新版本1.1.0
。如果你使用Cocoapods
建议你检查这个PR并安装版本1.1.0.rc.2
以避免编译错误Use Legacy Swift Language Version
。
【讨论】:
以上是关于对 Swift 3.0 的领域支持的主要内容,如果未能解决你的问题,请参考以下文章