问题标签 [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 投票
4 回答
19004 浏览

json - Swift 4 可编码;如何使用单个根级密钥解码对象

我正在使用Codable带有 JSON 数据的 Swift 4 协议。我的数据被格式化为在根级别有一个键,其对象值包含我需要的属性,例如:

我有一个User可以解码user密钥的结构:

由于idusername是 的属性user,而不是在根级别,我需要像这样创建一个包装器类型:

然后我可以通过 解码 JSON UserWrapper,并且User也被解码。看起来有很多冗余代码,因为我需要对我拥有的每种类型都进行额外的包装。有没有办法避免这种包装模式或更正确/优雅的方式来处理这种情况?

0 投票
3 回答
76 浏览

swift - 如何评估连续的 if 语句?

我有两个 if 语句要检查,其中一个检查非常昂贵。所以我想知道以下哪个语句的性能最高:

1)我不喜欢“末日金字塔”,但我确信它可以正常工作

2)我通常这样写......但它会检查isCostlyBool,如果isSimpleBoolfalse

3)我知道这可行,但它的评估方式与解决方案 2 不同吗?

4)我还没有找到其他解决方案吗?

0 投票
1 回答
1126 浏览

swift - 使用 keyPath 绑定 2 个属性(观察)

我正在尝试创建一个例程来简化将一个属性绑定到另一个属性,这是一个非常常见的操作。我在 Swift 4 和 XCode 9 中使用基于块的 KVO。

我希望能够编写以下内容来使用它们对应的绑定两个变量keyPath

这是一个简化的示例,它会生成我无法解决的各种编译错误。很可能 keyPath 传递给 不正确func bind,但是setValue使用 keyPath 也无法编译。请查看代码中的注释以了解我遇到的编译错误。

编辑

下面的答案有助于解决最初的编译问题。但是,为了使这完全有用,我需要能够将管道推入超类,如此处所示。这将使使用它的类非常简单,但我仍在努力解决编译错误:

Cannot invoke 'bind' with an argument list of type '(to: WritableKeyPath<PersonWatcher, PersonWatcher>, from: WritableKeyPath<PersonWatcher, PersonWatcher>)'

如果我将泛型类型 T 传递给绑定例程,则会收到此错误:

Type 'BindBase' has no subscript members

0 投票
1 回答
611 浏览

ios - 使用来自 JSON swift4 的键解码结构

使用 Swift 4 的Encoder&Decoder协议以及JSONDecoder如何Codeable使用给定 JSON 中的键初始化类型结构。

即给定下面的JSON,我希望只用于results初始化Example

0 投票
2 回答
5127 浏览

swift - 从 Swift 4 中删除了 toUIntMax() 和 toIntMax()

Swift 4 中的 toUIntMax() 方法和 toIntMax() 方法被什么取代了?错误发生在 FacebookCore 框架内。

任何帮助,将不胜感激

0 投票
1 回答
5149 浏览

ios - 从 Swift 4 中的后台线程调用并运行 Firebase 4 的 UI API

这些是我下载Xcode 9测试版后当前在我的项目中出现的错误。

错误信息

这直接连接到这篇文章。其中解决了类似的问题。我最初也遇到了这个问题,并通过遵循公认的解决方案来解决它。但是,这并没有解决我收到的这些其他错误消息。

这些是什么原因造成的?他们有问题吗?我怎样才能防止它们?

0 投票
1 回答
478 浏览

ios - '_.SegmentedControlItems' 没有实现 methodSignatureForSelector: -- 前面的麻烦无法识别的选择器

我正在以编程方式创建没有情节提要的 UISegmented 控件。我没有从数组中提取分段项,而是尝试使用模型类,

然后,在表格视图函数中,我编写了以下代码

如果我传递项目数组,我的应用程序可以正常工作。但是在我写完上面的代码后它崩溃了。并在控制台中给我这个错误-SForwarding:警告:类'Appname.SegmentedControlItems'的对象0x600000251640没有实现methodSignatureForSelector:-前面的麻烦无法识别的选择器-[Appname.SegmentedControlItems复制]

请帮忙

0 投票
1 回答
10331 浏览

ios - Swift 4“此类不符合键值编码”

我有一个 Swift 库,它严重依赖obj.valueForKey()NSObject.

迁移到 Swift 4 后,我发现这些调用总是崩溃并出现错误“此类与键的键值编码不兼容...”,除非我要查找的属性是用@objc.

现在是否必须声明属性@objc才能使用此方法找到它们?有替代方案吗?

0 投票
1 回答
539 浏览

swift - 将支持的方法限制为 Swift 4 中的泛型参数类型

给定一个泛型类型的结构,我想限制哪些方法只能调用泛型类型的子类型。

在这段代码中,我指定构建器应该只创建UIControls

但是,如您所见,我得到了相反的行为;aUIView不是a ;_ UIControl一个UIButton 一个UIControl。有什么方法可以在 Swift 中做到这一点?(我使用的是 Swift 4。)我使用泛型和协议尝试了几件事,但没有运气。

(我理解为什么上面的代码会以它的方式工作,但如果存在整体问题,我正在寻找替代方案。如果有人能提出一个好的解决方案,也许我可以改进这个问题以适应。)

0 投票
1 回答
3132 浏览

arrays - 警告“同时访问参数'self'......”真的适用于此吗?

我写了一个扩展Array,允许我弹出最后一个元素并立即将其添加到另一个数组中:

操场上的这个简单示例就像一个魅力:

但是使用结构内部的扩展(警告后的代码)会给我这个警告:

同时访问参数‘self’,但修改需要独占访问;考虑复制到局部变量

这只是一个警告,我的应用程序在预期的行为下运行得很好,但我很好奇这里是否真的存在危险。查看SE-0176,我了解警告的目标,如果我要使用它从我附加到的同一个数组中弹出最后一个元素,因为写时复制可能会搞砸。所以我猜它与结构有关。但是在同一个结构内的两个不同数组上使用它,我认为没有危险。我是否遗漏了什么,有没有办法编写可以规避潜在问题的扩展?