问题标签 [swift4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1029 浏览

ios - 如何将 Codable 协议与引用类型一起使用?

例子:

输出:

如何将 Codable 协议与引用类型一起使用?

这种行为将来可能会改变吗?https://github.com/apple/swift-evolution/blob/master/proposals/0167-swift-encoders.md

0 投票
7 回答
61073 浏览

json - 使用 Swift 4 中的 JSONDecoder,缺少的键可以使用默认值而不是可选属性吗?

Swift 4 添加了新Codable协议。当我使用JSONDecoder它时,它似乎要求我的类的所有非可选属性Codable在 JSON 中都有键,否则它会引发错误。

让我的类的每个属性都是可选的似乎是不必要的麻烦,因为我真正想要的是使用 json 中的值或默认值。(我不希望该属性为零。)

有没有办法做到这一点?

0 投票
1 回答
1212 浏览

ios - 如何修复上下文闭包类型 '((String, JSON), (String, JSON)) -> Bool' 需要 2 个参数,但在闭包体中使用了 1 个?

我正在将我的代码从 swift 3.2 转换为 swift 4,我收到此代码的错误

上下文闭包类型 '((String, JSON), (String, JSON)) -> Bool' 需要 2 个参数,但 1 在闭包主体中使用

如何解决这个问题?

0 投票
8 回答
23378 浏览

json - Swift 4 JSON Decodable 解码类型更改的最简单方法

使用 Swift 4 的 Codable 协议,可以实现高水平的底层日期和数据转换策略。

给定 JSON:

我想将其强制转换为以下结构

日期解码策略可以将基于字符串的日期转换为日期。

有没有什么东西可以用基于字符串的浮点数来做到这一点

否则,我一直坚持使用 CodingKey 引入字符串并使用计算获取:

这种方式让我做的维护比看起来应该需要的要多。

这是最简单的方式,还是有类似于 DateDecodingStrategy 的其他类型转换的方法?

更新:我应该注意:我也走了重写路线

但这是相反的方向,因为它迫使我为自己做这一切。

0 投票
1 回答
2095 浏览

json - 在 Swift 4 中,如何使用 Codable 解码 JSON 并在解码后的对象之间创建引用?

Codable在创建对象(不是结构)时,如何使用它们来解码 JSON 并交叉引用它们?在此示例中,我希望Painting该类具有Color也在 JSON 中定义的对象数组。(我也希望能够将它们编码回 JSON。)

奖励:在这种情况下,我更愿意Painting.colors成为非可选let属性而不是 var. 我不希望它在创建后改变,我也不希望它永远为零。(我宁愿使用空数组的默认值而不是 nil。)

我考虑过的一些方法:

  • 手动编码/解码json。似乎需要做很多额外的工作,但也许它给了我所需的控制权?

  • 将 JSON 解码分解为多个步骤。将 JSON 反序列化为字典,首先提取并解码颜色,然后是绘画(可以访问上下文中的颜色)。这感觉就像是在与Codable想要你一次使用Data而不是Dictionary.

  • 通过动态属性在运行时Painting动态查找s。Color但我更愿意在开始真正的工作之前设置和验证所有对象关系,然后再不改变。但也许这将是最简单的?

  • 不使用可编码

  • 其他一些坏主意

0 投票
16 回答
117212 浏览

json - 如何在 Swift [45] 可解码协议中解码 JSON 字典类型的属性

假设我的Customer数据类型包含一个metadata属性,该属性可以包含客户对象中的任何 JSON 字典


metadata属性可以是任意 JSON 地图对象。

NSJSONDeserialization在我可以使用新的 Swift 4协议从反序列化 JSON 中转换属性之前Decodable,我仍然想不出一种方法来做到这一点。

有谁知道如何在 Swift 4 中使用 Decodable 协议来实现这一点?

0 投票
1 回答
485 浏览

swift - Swift 4 中泛型类型的扩展

我有两个协议和一个通用结构:

有很多方法DataSetElement适用于TwoDimensionalDataPoint. 所以我做了一个这样的扩展:

编译器不喜欢这样,并说:

“DataSet.Element”(又名“OneDimensionalDataPoint”)类型的值没有成员“x”

既然我将 Element 限制TwoDimensionalDataPoint在扩展中,这不应该没问题吗?

0 投票
1 回答
317 浏览

ios - IOS:“线程 1:信号 SIGABRT”切换段时

我正在关注 big nerd 分支的一本书,名为“iOS 编程第 5 版”。

这段代码在地图视图中创建了一个分段视图,每次我在运行它时更改分段时,它都会崩溃:

线程 1:信号 SIGABRT

当我使用最新版本时,这可能与书中的旧版本 Swift 有关。

这是我的代码:

我该如何解决?

0 投票
3 回答
30071 浏览

ios - 扩展中的声明不能覆盖 Swift 4 中的错误

我有一个扩展:

但对我来说,topMostController我得到下一个错误:

它适用于 Swift 3.1,但对于 Swift 4,我收到此错误。如何修复?他们在 Swift 4 中发生了什么变化?

0 投票
1 回答
961 浏览

ios - NavigationBar setTitleVerticalPositionAdjustment(_:for:) 方法不适用于 iOS 11 Beta 上的标题图像

在 iOS10 (Swift 3) 上运行良好的代码不适用于 iOS11 Beta (Swift 4 / XCode 9.0 beta)

将图像设置为导航栏标题并调整其垂直位置:

self.navigationItem.titleView = UIImageView(image: UIImage(named: "some_image")) self.navigationController?.navigationBar.setTitleVerticalPositionAdjustment(-4.0, for: .default)

图像在 iOS 11 测试版上没有得到垂直调整,在 iOS 10 上它可以正常工作。

请注意,如果导航栏标题设置为文本 ( self.title = "Some title"),则方法setTitleVerticalPositionAdjustment(_:for:)可以正常工作。此问题仅在尝试使用 UIImageView 作为导航栏标题时才明显。

最近有没有人经历过类似的事情?