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

arrays - 在 Swift 中创建扩展以从数组中过滤 nil

我正在尝试为 Array 编写一个扩展,它允许将可选 T 的数组转换为非可选 T 的数组。

例如,这可以写成这样的自由函数:

但是,我不能让它作为扩展工作。我试图告诉编译器扩展只适用于可选值的数组。这是我到目前为止所拥有的:

(它不编译!)

0 投票
3 回答
1390 浏览

swift - 如何使用泛型类型来获取具有相同类型的对象

我有扩展名NSManagedObject应该可以帮助我在上下文之间传输对象:

现在它返回对象,NSManagedObject我应该将它转换为我想要的类,如下所示:

有没有办法Swift避免这种无用的转换,如果我transferTo(context: ...)从类的对象调用MyEntity使其返回类型为MyEntity

0 投票
6 回答
3441 浏览

swift - keyPathsForValuesAffecting 与 NSManagedObject

Bonjour,我想将 Aaron 书中的 Objective'c 练习翻译成 swift 但我找不到解决方案。Objective'c 代码是:

我在开发人员文档中找到了一个函数,但我不明白如何实现此代码。

更明确地说,这是 Apple 文档

一对一的关系

要为一对一关系自动触发通知,您应该覆盖 keyPathsForValuesAffectingValueForKey: 或实现一个合适的方法,该方法遵循它为注册相关键定义的模式。

例如,一个人的全名取决于名字和姓氏。返回全名的方法可以写成如下:

当 firstName 或 lastName 属性发生更改时,必须通知观察 fullName 属性的应用程序,因为它们会影响属性的值。

一种解决方案是覆盖 keyPathsForValuesAffectingValueForKey:指定一个人的 fullName 属性依赖于 lastName 和 firstName 属性。清单 1 显示了此类依赖项的示例实现:

清单 1 keyPathsForValuesAffectingValueForKey 的示例实现:

有人能告诉我如何快速实现这个功能吗?

感谢你们对我的帮助。

0 投票
3 回答
6450 浏览

swift - 我可以在 Swift 中扩展元组吗?

我想在 Swift 中为(例如)两个值的元组编写一个扩展。例如,我想写这个swap方法:

这样这s将是(String, Int)具有 value的类型("one", 1)。(我知道我可以很容易地实现一个swap(t)函数,但这不是我感兴趣的。)

我可以这样做吗?我似乎无法在extension声明中写出正确的类型名称。

另外,我想答案是一样的,我可以让一个 2 元组采用给定的协议吗?

0 投票
1 回答
332 浏览

swift - 从字节数组到结构的转换。迅速

我有字节转储,我需要解析结构

c++ 示例:

我怎样才能快速做到这一点?

0 投票
1 回答
249 浏览

swift - Does not have a member named ( Swift )

I have two labels (CountryCode, CountryName) in prototype cells, and I created a class for them called " CountryCell " and I created the TableViewController class called " CountriesVC " I made the labels' outlets in the CountryCell but I want to use them in CountriesVC and when I do so it reports an error that says 'CountriesVC' Does not have a member named 'CountryCode' .

Thanks a lot.

Here is the code where I want to use CountryCode and CountryName

Here is CountryCell code :

0 投票
1 回答
1676 浏览

swift - 如何为仅在测试中可见的结构创建 init 方法?

我想为我的结构创建一个 init 方法,其中包含一堆用于单元测试的默认值。我不希望主模块能够看到这个 init 方法。

我以为我可以简单地在我的测试类的文件中创建我的结构的扩展,但这不起作用:

Foo.swift(在应用程序目标中):

FooExtension.swift(在测试目标中):

请注意主文件中的非默认初始化程序,因此 Swift 编译器不会自动为我创建成员初始化程序。也许这与问题有关,也许不是。

Swift 编译器抱怨Cannot assign to 'bar' in 'self'。但是,当我将该 init 方法复制到Foo我的主要目标中我的结构的原始定义中时,它工作正常。无论有没有默认参数值,我都会得到相同的结果。

这是 Swift 编译器错误还是与在一个模块中为另一个模块中定义的结构定义扩展有关?当我尝试在 Playground 中复制它时,一切正常。

我正在使用带有 Xcode 版本 6.4 (6E35b) 的 Swift 1.2

0 投票
1 回答
1192 浏览

swift - 无法在 Swift 中覆盖 NSDictionary 的初始化程序

我正在尝试在 Swift 中扩展类 NSDictionary 以包含在 init() 上设置的 NSDate。添加自定义 init() 时,出现编译器错误:

“必需”初始化程序“init(dictionaryLiteral:)”必须由“NSDictionary”的子类提供

但是,当我使用自动完成添加该初始化程序时,我收到以下错误:

来自扩展的声明还不能被覆盖

有什么方法可以覆盖 NSDictionary 的初始化程序,或者 Swift 还不能处理吗?

这是我的课:

0 投票
1 回答
610 浏览

swift - Swift struct 扩展函数 - “不能在‘self’中分配给‘origin’”

Swift 中的结构可以包含函数,也可以有扩展。凉爽的!看起来是一种使该函数可用于更多类并减少参数传递的巧妙方法。这是该函数最初在地图视图控制器中的外观:

trackRect是该类的 MKMapRect 成员。

MKMapRect 扩展为包括每个点,以便可以根据需要将地图重置为整个区域,显示所有点。

我试图使它成为 MKMapRect 的扩展(部分 - 显示直到错误):

我没想到只能分配给自我,但我确实希望能够分配给结构的成员。如何才能做到这一点?

0 投票
1 回答
990 浏览

swift-extensions - Swift 扩展声明错误:“声明仅在文件范围内有效”

我正在尝试创建一个包含计算属性的简单 Swift 扩展。我不明白为什么会出现此编译错误(“声明仅在文件范围内有效”)。错误出现在“私有扩展 OpStack”行的开头。(此代码包含在一个类中。)

如果我删除扩展中的所有代码,我仍然会得到同样的错误。

这是代码: