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

oop - 如何将必需的属性添加到必须实现必需的初始化程序的子类?

这是场景。我有三个类:ABC。类A是 的子类B。类C需要将其实例变量之一传递给类A(我们称之为b)。我想确保它在C初始化时发生,A以确保我不会遇到任何b为零的情况。以下是其结构A和方式:B

Swift 规则规定必须在初始化时定义非可选或隐式展开的变量。但是,由于我必须实现 B 的初始化(我无法控制 B;由 Apple 提供)我不能保证,因为我不能向 A 的初始化程序添加额外的参数。

我想确保 A 被调用A(b)or A(a,b),但不是A(a),以确保 b 被初始化。我尝试寻找解决方案或考虑使用协议或扩展的解决方案,但我无法弄清楚。我得到的答案是通过这个答案,但它并没有真正做到我想要的。

所以我有两个问题(一个使另一个无效): 1. [显而易见的问题] 有解决方案吗?(我是否遗漏了一些非常明显的东西?) 2. 我是不是搞错了?我应该使用不同的模式吗?

谢谢!

0 投票
1 回答
1787 浏览

ios - `Int` 类型的不可变值仅具有名为 adjust 的变异成员

我现在正在学习 Swift 语言。

在 Apple 的文档中,我看到了一个扩展示例,例如:

所以我只是这样称呼adjust()

它抛出一个错误:

快速错误

我不确定是什么导致了错误?谁能帮我理解这个问题?

0 投票
1 回答
192 浏览

swift - 何时使用泛型参数子句

我是 swift 的泛型新手,在阅读一些书籍时,我遇到了一些我不明白的东西。在泛型函数中,什么时候适合使用类型参数(函数名之后的右边)?什么时候不合适?

这是一个未使用的示例(仅签名;来自标准库):

这是一个使用它的例子(取自我正在阅读的一本书):

我阅读了 Apple 的 swift language reference,部分:Generic Parameters and Arguments。但我仍然不清楚。提前感谢您的任何见解。  

0 投票
1 回答
1227 浏览

objective-c - Swift Extension 无法向 Objective-C 类添加重载方法

如果使用 Swift 扩展向 Objective-C 类添加重载方法,它似乎只调用第一个方法,从而在运行时产生意外行为或崩溃。Swift 类的扩展(相对于 Objective-C)可以正常工作。我想确定是否有任何解决方法,并确认这是我应该向 Apple 报告的错误。鉴于 Objective-C 不支持重载方法,而 Swift 支持,我可以想象将两者混合会导致问题。

获得扩展的类都是空的,除了具有 init 函数的 Objective-C 类。ObjClass 在 .h 和 .m 文件中声明并使用 Swift 桥接头导入。原始 SwiftClass 与 Swift 扩展一起在代码示例中定义:

现在使用字符串、int 和对象调用重载方法:

对于 ObjClass,所有方法调用都对 Int32 类型的第一个方法进行。通过使用COpaquePointer,我可以看到这与对象指针有关,但略有不同。

Swift 类上的 Swift 扩展按预期工作:

希望这可以在某个时候得到支持。在那之前,我相信它应该在编译时失败,而不是给出意外的行为或崩溃。有没有人为此建议解决方法?

我知道它正在调用第一个方法,就像我交换 ObjClass 扩展方法一样,如下所示:

然后调用objClass.log(str)工作正常,但调用objClass.log(10)产生:

0 投票
1 回答
488 浏览

swift - 如何在 Swift 中的泛型扩展中使用带有可选类方法的协议?

我正在尝试使用具有类方法的现有类的扩展,例如:

我在一个通用的扩展中使用这个协议,比如:

这应该可以,但是当我构建它时,Xcode 说“Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1”。如果我不在协议中使用“可选”,我不需要在扩展中解开 foo() 并且即使我删除了“self”,一切都会正常工作。谁能告诉我为什么以及如何使可选功能正常工作?提前致谢。

0 投票
1 回答
2413 浏览

iphone - Swift 高度变化中的方向变化和横向上的 uibutton 隐藏

我正在制作一个自定义键盘,当移动设备的方向发生变化时,我必须在横向中隐藏一个按钮,请建议我该怎么做我正在使用下面的代码来完成这项任务,请帮助我。在横向中该按钮也是可见的 我想在横向上隐藏按钮并在纵向模式下可见

0 投票
1 回答
1202 浏览

swift - Swift extension on NSManagedObject

I could do this in Objective-C, but I'm having trouble figuring out how to make it work in Swift. I'm writing an extension on an NSManagedObject so that I can simply call a function any time I want to create a new entity. The function will then check the existing entities for a match, and if there isn't a match, the function will create the new entity and return it. If there is a match, it will return the match. Here's my code:

  • "i_d" is a unique id for the entity

This is how I used to be able to call something like this in Objective-C (roughly translated):

Whenever I try something like var chap: Chapter = Chapter.createChapter(...) , Xcode only allows me to put another Chapter object in the parameter list, whereas if I tried calling the function from a Chapter instance, the function parameters can fill in fine.

How would I go about solving my problem?

Edit:

From answer suggestions, I fixed my code by putting "class" in front of my function definition, as well as correctly creating my initial variable in the function and adding question marks in the necessary places.

0 投票
1 回答
2534 浏览

swift - Swift 扩展,缺少参数 #1 调用中的参数

我会尽量保持简短和简单。

我有一个 NSDate 扩展,我在整个应用程序中用于许多事情,但我遇到了(奇怪)一个非常简单的功能的问题。

扩展的相关部分是:

它的目的只是返回一个表示星期一早上的 NSDate。

到目前为止,一切都很好...

问题是当我尝试调用此函数时,出现错误:

缺少参数 #1 的参数在调用

我在这里阅读了https://stackoverflow.com/a/26156765/3100991关于有人遇到类似问题的信息,但是他们的代码很长而且令人困惑,我不明白答案。如果提供简单的解释和修复,我认为这对普通社区会很有用。

提前感谢您的帮助!

洛伊克

0 投票
1 回答
643 浏览

swift - 用 EXC_BAD_INSTRUCTION 在空扩展中声明符合 @objc 协议

在将 Swift 协议与数组结合使用时遇到了很多麻烦,但在操场上开始出现问题之前,我什至无法重现我的整个问题。这是一个最小的例子。

我有两个协议和一个Bus声明符合其中一个协议的类。此外,一个空的扩展Bus声明符合其他协议:

控制台输出可能看起来是随机的,但事实并非如此。如果我尝试创建以下实例,我会始终如一地得到它Bus

  • 如果我们注释掉所有@objc属性,错误就会消失
  • 如果我们不符合,错误就会消失Utterableextension Bus: Utterable{}

我的协议必须具有该属性@objc的原因是,否则 Obj-c 运行时会在尝试执行诸如var myDisplayables: [Displayable] = [ Bus() ]或以其他方式动态检查协议的一致性时抱怨

同样,请注意,这是一个最小的示例。

使用 Swift 1.2 更新: 现在似乎已修复。Xcode 建议进行这些更改“因为协议需要它”:

0 投票
1 回答
707 浏览

swift - Swift 的广义类型约束

作为练习,我正在尝试Array在 Swift 中进行扩展以添加sum()成员函数。这应该是类型安全的,我希望sum()仅当数组包含可以添加的元素时才调用编译。

我尝试了一些这样的变体:

这个想法是说,“好吧,这是一个泛型函数,泛型类型必须类似于Int,并且还必须与T数组元素的类型相同”。但是编译器抱怨:“相同类型的要求使泛型参数 U 和 T 等效”。没错,他们应该是,加上额外的约束T : _IntegerArithmeticType

为什么编译器不让我这样做?我该怎么做?

(我知道我应该稍后修复事物是如何相加的以及返回类型到底是什么,但我现在被困在类型约束上。)