对 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 存储库的 ma​​ster 分支

或者你可以使用迦太基:

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 => truepod '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 的领域支持的主要内容,如果未能解决你的问题,请参考以下文章

在 Glassfish 3.0 安全领域中使用 bcrypt

复合主键领域/swift

比较对象领域 Swift

使用swift存储数据而不在领域中制作模型

Swift 4 可编码领域对象子类

在swift 3中从字符串实例化领域对象