问题标签 [swift-extensions]

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 投票
0 回答
1033 浏览

swift - Swift 泛型和扩展函数覆盖

Swift 上的泛型有一个奇怪的问题

有一个NSManagedObject带有扩展的子类层次结构

BaseCloudKitItem<-MyObject

有一个通用类:

和用法:

将类传递给泛型CloudFetcherMyObject

所以问题是我发现从基类调用泛型内部的方法BaseCloudKitItem,而不是从MyObject. 如果我将 CloudFetcher 接口声明从更改class CloudFetcher<T : BaseCloudKitItem>class CloudFetcher<T : MyObject>它可以完美运行,但是以这种方式使用泛型是没有意义的。

此外,在来自目标方法内部的日志中,println()我可以看到所需的类,但仍然没有调用所需的方法:

这对我来说看起来很奇怪,也许有人可以提供我可以解决的方法?

谢谢!

0 投票
2 回答
264 浏览

cocoa - 在 Swift 中扩展 Bool 以获得有趣和新的控制结构

我正在玩 Swift 扩展,并在尝试扩展 Bool 时碰到了一个奇怪的错误:

出于某种原因,即使在boolean表达式变成true.

对可能发生的事情有任何想法吗?

0 投票
1 回答
236 浏览

swift - Swift 泛型类型推断扩展

我试图通过为 Array 类创建 Min 和 Max 扩展(类似于 C# 中的 Min 和 Max Extension 方法)来建立我对 Swift 中的泛型的理解。可能有更好的方法来做到这一点,但正如我所说,它只是为了帮助我理解泛型。

我创建了以下代码:

为了测试,我创建了一个基本的 Person 类:

当我在闭包中明确表示时,它似乎适用于这些情况:

但是,我无法推断出使用极端速记案例的类型:

或中等长度:

如果有人是这方面的专家,你能告诉我我做错了什么吗?我不得不承认,我花了相当多的阅读和破解才能走到这一步!

提前感谢您的任何回复

0 投票
1 回答
112 浏览

swift - 跨 Swift 模块消除初始化器的歧义

这个问题使我发现了这个问题。

如果我在不同模块的同一个类中有两个具有相同签名的初始化程序,我该如何指定要调用的初始化程序?要使用与该问题相同的示例,假设我声明了一个这样的便利初始化程序:

我认为这也是两个扩展的问题,它们将具有相同签名的方法添加到同一个类。

有没有办法解决这个问题?或者这只是一个错误?

0 投票
1 回答
479 浏览

ios - iOS Swift - 如何在扩展中引用 NSOperationQueue 以取消现有操作?

我正在为 NSURL 创建一个扩展,它基本上验证 URL 是否存在并返回一个有效站点。

我在这个过程中使用 NSURLConnection.sendAsynchronousRequest(...) 来实际检查 http 标头响应,效果很好。

但是,在我的情况下,每次更新 text 后,我​​都会在文本字段中检测提供的 URL ,并希望通过取消任何现有的 NSURLConnection 请求来尝试提高性能。我认为这样做的唯一方法是创建一个“可引用的”NSOperationQueue,然后我可以调用“myOperationQueue.cancelAllOperations()”。

所以我的问题是,如何创建一个可引用的 NSOperationQueue,我可以在每次调用此验证函数时调用适当的“cancelAllOperations()”,以便停止任何正在运行的操作?

同样,由于这是一个类扩展,我不能只为操作队列创建一个全局变量,并使用“self.myOperationQueue”引用它。

0 投票
1 回答
1064 浏览

swift - Swift 数组下标扩展“范围不能转换为 Int"

我在 Array 上定义一个扩展来覆盖 Slice 创建:

但是,我在定义 a 时遇到错误:“范围不可转换为 Int”(没有强制转换,错误是“HalfOpenInterval ...”)。我究竟做错了什么?

0 投票
2 回答
678 浏览

string - Swift有没有一种方法可以在另一个字符串中给出子字符串的索引

是否有任何现有函数可以在另一个字符串中查找子字符串的索引?像.indexOfSubstringthank 这样的方法可以做到这一点:

并打印:

0 投票
6 回答
62024 浏览

objective-c - Objective-C 代码可以调用 Swift 类扩展吗?

我搜索了一些帖子,我认为我无法在 Swift 下编写扩展,并从 Objective-C 代码中调用它,对吧?

@objc像属性只支持方法、类、协议?

0 投票
2 回答
22326 浏览

swift - 你可以在 Swift 中的扩展之间覆盖吗?(编译器似乎很困惑!)

我一直在用 Swift 开发一个 iOS 应用程序(其中大部分是从 Objective-C 迁移而来的)。我正在使用 Core Data 并尝试使用扩展来向从我的模型自动生成的类添加功能。我在 Objective-C 中很容易做的一件事是在 A 类的一个类别中添加一个方法,并在 B 类(从 A 派生)的一个类别中覆盖该方法,我希望在 Swift 中做同样的事情。

一段时间以来,我的项目中有以下代码(这只是一个示例),虽然我还没有使用该功能,但编译器在编译这段代码时工作得很好:

希望那里的某个 Swift 专家已经看到了我的问题,但我是这样发现的:最近我尝试使用具有非内置类型的参数和/或返回值的方法添加类似的功能,但我开始得到这个错误:扩展中的声明还不能覆盖。

为了探讨这个问题,我将以下内容添加到我的一个 swift 文件中,认为它可以编译得很好:

令我惊讶的是,我收到了相同的编译器错误(扩展中的声明还不能覆盖)。什么?但是我已经多次使用这种模式而没有编译器错误。

问题:首先,是否有一些关于在扩展中覆盖的规则,以便在某些情况下它应该工作,但在其他情况下却不是?第二(更令人不安)为什么 Swift 编译器看起来如此不一致?我在这里想念什么?请帮助我恢复对 Swift 的信心。

更新:

正如 Martin R 在正确答案中所指出的,您似乎可以覆盖当前版本的 Swift(1.1 通过 Xcode 6.1)中的方法,只要它们(1)仅涉及从 NSObject 派生的类并且(2)不使用 inout修饰符。这里有一些例子:

0 投票
0 回答
236 浏览

swift - Swift 便利初始化崩溃

这是我在操场上的代码

它在 XCode 6.1 上线时崩溃(异常)self.init. ([NSObject(NSObject) doesNotRecognizeSelector:])

它还会在应用程序上下文而不是操场崩溃!任何想法 ?