问题标签 [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.
ios - 如何将 Codable 协议与引用类型一起使用?
例子:
输出:
如何将 Codable 协议与引用类型一起使用?
这种行为将来可能会改变吗?https://github.com/apple/swift-evolution/blob/master/proposals/0167-swift-encoders.md
json - 使用 Swift 4 中的 JSONDecoder,缺少的键可以使用默认值而不是可选属性吗?
Swift 4 添加了新Codable
协议。当我使用JSONDecoder
它时,它似乎要求我的类的所有非可选属性Codable
在 JSON 中都有键,否则它会引发错误。
让我的类的每个属性都是可选的似乎是不必要的麻烦,因为我真正想要的是使用 json 中的值或默认值。(我不希望该属性为零。)
有没有办法做到这一点?
ios - 如何修复上下文闭包类型 '((String, JSON), (String, JSON)) -> Bool' 需要 2 个参数,但在闭包体中使用了 1 个?
我正在将我的代码从 swift 3.2 转换为 swift 4,我收到此代码的错误
上下文闭包类型 '((String, JSON), (String, JSON)) -> Bool' 需要 2 个参数,但 1 在闭包主体中使用
如何解决这个问题?
json - Swift 4 JSON Decodable 解码类型更改的最简单方法
使用 Swift 4 的 Codable 协议,可以实现高水平的底层日期和数据转换策略。
给定 JSON:
我想将其强制转换为以下结构
日期解码策略可以将基于字符串的日期转换为日期。
有没有什么东西可以用基于字符串的浮点数来做到这一点
否则,我一直坚持使用 CodingKey 引入字符串并使用计算获取:
这种方式让我做的维护比看起来应该需要的要多。
这是最简单的方式,还是有类似于 DateDecodingStrategy 的其他类型转换的方法?
更新:我应该注意:我也走了重写路线
但这是相反的方向,因为它迫使我为自己做这一切。
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
但我更愿意在开始真正的工作之前设置和验证所有对象关系,然后再不改变。但也许这将是最简单的?不使用可编码
其他一些坏主意
json - 如何在 Swift [45] 可解码协议中解码 JSON 字典类型的属性
假设我的Customer
数据类型包含一个metadata
属性,该属性可以包含客户对象中的任何 JSON 字典
该metadata
属性可以是任意 JSON 地图对象。
NSJSONDeserialization
在我可以使用新的 Swift 4协议从反序列化 JSON 中转换属性之前Decodable
,我仍然想不出一种方法来做到这一点。
有谁知道如何在 Swift 4 中使用 Decodable 协议来实现这一点?
swift - Swift 4 中泛型类型的扩展
我有两个协议和一个通用结构:
有很多方法DataSet
只Element
适用于TwoDimensionalDataPoint
. 所以我做了一个这样的扩展:
编译器不喜欢这样,并说:
“DataSet.Element”(又名“OneDimensionalDataPoint”)类型的值没有成员“x”
既然我将 Element 限制TwoDimensionalDataPoint
在扩展中,这不应该没问题吗?
ios - IOS:“线程 1:信号 SIGABRT”切换段时
我正在关注 big nerd 分支的一本书,名为“iOS 编程第 5 版”。
这段代码在地图视图中创建了一个分段视图,每次我在运行它时更改分段时,它都会崩溃:
线程 1:信号 SIGABRT
当我使用最新版本时,这可能与书中的旧版本 Swift 有关。
这是我的代码:
我该如何解决?
ios - 扩展中的声明不能覆盖 Swift 4 中的错误
我有一个扩展:
但对我来说,topMostController
我得到下一个错误:
它适用于 Swift 3.1,但对于 Swift 4,我收到此错误。如何修复?他们在 Swift 4 中发生了什么变化?
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 作为导航栏标题时才明显。
最近有没有人经历过类似的事情?