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

ios - Swift 扩展类函数仅适用于 1 个文件

我有一个名为的文件UIElements.swift,其中包含我想在整个应用程序中使用的一些扩展名。

到目前为止,他们工作得很好。在我创建了一个新的 viewController 之前,我无法让它们中的任何一个在那个或我制作的任何其他 viewController 中工作。它们只在我的第一个 viewController 中工作?

这是扩展文件的代码:

显然我在文件中有更多扩展名,但这是我在发现它不起作用时首先尝试调用的函数。

这是不起作用的代码,在一个名为的文件中Login_VC.swift

上面的代码返回以下错误:

这是我调用的第一个视图控制器中的一个类似按钮LandingPageVC.swift(此代码工作正常)

我在任何一个文件中都看不到我所做的任何不同的事情。

然而,当我开始写作时UIImage.i-> 它imageWithColor在第一个视图控制器中提出了建议,但它没有出现在任何其他文件中。

我没有做任何事情来在这两个文件中导入这个类。由于它只是 的扩展UIImage,因此应使用UIKit.

我还尝试添加public到课程中,但没有做任何事情。

谁能解释为什么此功能在一个文件中有效,而在另一个文件中无效?

0 投票
4 回答
8086 浏览

swift - Set() 的 Swift map(_:) 扩展?

Swift 1.2 支持Set()无序集合,但map(_:)似乎不适用于 Sets,所以我决定在我的操场上变得聪明并尝试:

这似乎奏效了。所以我尝试扩展Set:

而且我认为它不起作用是有充分理由的,例如这里的示例:

关于如何扩展 Set 以可靠地使用 map(_:) 的任何想法?谢谢大家。

0 投票
9 回答
24623 浏览

swift - 如何添加可选的字符串扩展?

你可以像这样创建一个字符串扩展:

但是如果你想让它应用于可选字符串呢?

尝试添加extension String? {会产生错误:

约束扩展必须在非特化泛型类型“可选”上声明,约束由“where”子句指定

0 投票
2 回答
679 浏览

swift - Swift 1.2 扩展

我将 XCode 升级到 6.3 / Swift 1.2,我看到扩展错误。下面是我对 UINavigationItem 的扩展,用于隐藏 backButton 文本。

编译时,我收到以下错误

带有 Objective-C 选择器“backBarButtonItem”的方法“backBarButtonItem()”与“backBarButtonItem”的 getter 冲突

不再可以使用扩展来覆盖方法吗?

0 投票
6 回答
18354 浏览

ios - Swift - 如何覆盖具体子类中的扩展方法

我在 UIView 上有一个扩展,实现了一个协议

在一个具体的子类中,我想重写这个扩展方法:

我设置断点并看到扩展方法被调用,而不是具体的子类方法:

0 投票
2 回答
503 浏览

swift - 从 Swift 的 Extension 类调用委托方法

我正在为 Objective C 中的 UIAlertView+Block 等回调实现实现 UIAlertView 扩展,但委托方法没有从此类调用任何帮助。提前致谢。

0 投票
1 回答
427 浏览

swift - 用于获取实例私有属性的 Swift 扩展

我正在使用这个开源库,它是 AddressBook.framework 的包装器。没有删除联系人的方法,所以我将使用 default ABAddressBookRemoveRecord。但是为此,我需要ABAddressBookRef.

由于它在该库 的APAddressBook.m文件中声明为并且我无法访问它,因此我想在 Swift 中编写扩展,包含返回它的方法。APAddressBook@property (nonatomic, readonly) ABAddressBookRef addressBook;

所以这是我的扩展的主体:

我也尝试过使用private var xoAssociationKey: UInt8 = 0as associatedKey,但调用getABAddressBook()函数总是崩溃fatal error: unexpectedly found nil while unwrapping an Optional value.

我的代码有什么问题?还有更好的方法来解决我的问题吗?

0 投票
1 回答
41239 浏览

swift - Swift“where”数组扩展

从 Swift 2.0 开始,我们似乎可以更接近适用于谓词情况的泛型类型的扩展。

虽然我们仍然不能这样做:

...我们现在可以这样做:

...并且 Swift 在语法上接受它。但是,对于我来说,当我填写示例函数的内容时,我无法弄清楚如何让编译器满意。假设我要尽可能明确:

...编译器将不接受提供给过滤器的闭包,抱怨

无法使用类型为“((T)-> Bool)”的参数列表调用“过滤器”

如果 item 被指定为 Idable,则类似。有人在这里有运气吗?

0 投票
0 回答
592 浏览

macos - 将objective-C类的可选方法添加到swift扩展

对于一个已经很广泛的 Objective-C 应用程序,我想添加 Core Data 功能。最近在 Swift 中添加了新功能,到目前为止效果很好。

因为我的 Objective-CAppDelegate已经包含了很多东西,所以我决定写一个 Swift 扩展来AppDelegate. 我发现 Objective-C 和 Swift 部分都可以非常愉快地一起生活,除了以下几点。

我从一个空的 Swift Core Data 项目的 Swift 模板中复制的核心数据内容。

问题在于一个可选方法applicationShouldTerminate:(来自NSApplicationDelegate协议),我没有在类的遗留 Objective-C 部分中定义它。但是 Swift 扩展中的定义不会编译,因为该方法似乎是双重定义的。显然,没有提及 Obj-C 源代码中的可选方法会导致包含默认版本。

我试图applicationShouldTerminate:在 Obj-C 中实现一个在 Swift 中调用的虚拟对象applicationShouldterminate2(sender),但是 Obj-C 没有看到扩展中的方法。有没有办法@objc让我可以使符号可见?

关于我应该如何进行的任何提示?

重要的是要知道,我的带有 Core Data 内容的 Swift 扩展最初编译得很好。当我升级到 XCode 6.3b2(我认为)时,符号冲突首先发生。在没有冲突之前。我现在在 XCode 7b1,但仍然没有雪茄。

编辑:添加源代码
文件“AppDelegate.h”:

文件“AppDelegate.m”

AppDelegate+CD.Swift

NSApplicationDelegate 协议有如下定义

错误信息:

我认为,自从 XCode6.3b2 以来,编译器生成了一个默认的“ applicationShouldTerminate:”定义,而之前没有。
我目前的解决方法是完全注释掉func applictionShouldTerminate {...}(我预计不会有什么危害,因为我以只读方式访问 CD 数据——CD 数据是由另一个应用程序写入的)。但是,可能有更好的解决方法。

0 投票
0 回答
53 浏览

ios - Swift Array 扩展仅适用于某些类型的 Array

如果我想进行Array扩展,但只Array对 type进行扩展[UIView],这在 Swift 中是否可行?

目前我只是在做一个普通extension Array的,前提是Array只包含 type 的元素UIView,但似乎必须有更好的方法。

这是我目前的做法: