问题标签 [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.
swift - 是否可以在扩展中使用非只读计算属性?
扩展中的计算属性是否可能同时具有 getter 和 setter?Apple 的指南没有提到它,我看到的唯一示例仅显示扩展中的只读计算属性。
ios - 来自不同框架的扩展方法的名称冲突
作为测试,我创建了两个框架。两个框架都包含这个扩展:
然后我导入了这两个框架并尝试打印UIDevice.currentDevice().extraInfo.prop
. Swift 编译器给出错误:Ambiguous use of extraInfo"
.
如何解决这样的名称冲突?
swift - Swift 扩展的访问控制
Swift 编程语言对扩展的访问控制有这样的说法:
您可以在类、结构或枚举可用的任何访问上下文中扩展类、结构或枚举。在扩展中添加的任何类型成员都具有与在被扩展的原始类型中声明的类型成员相同的默认访问级别。如果您扩展公共或内部类型,您添加的任何新类型成员都将具有默认访问级别 internal。如果您扩展私有类型,您添加的任何新类型成员都将具有私有的默认访问级别。
或者,您可以使用显式访问级别修饰符(例如,私有扩展)标记扩展,以为扩展中定义的所有成员设置新的默认访问级别。这个新的默认值仍然可以在单个类型成员的扩展中被覆盖。
我不完全理解上面的说法。是不是这样说的:
swift - 如何扩展两个插座(swift 2)
我为 UITextField 创建了扩展。我需要 UITextView 的相同扩展名。如何使此扩展可用于所有其他视图?
我的扩展代码:
swift - 如何在 Swift 中覆盖 NSDate 对象的 debugDescription
在 Xcode 调试器中显示对象的值时,我试图覆盖该debugDescription
属性。NSDate
我的扩展代码:
我已经确认带有我的扩展代码的文件包含在测试项目目标中,因为我能够调用该yeah
函数并且print
它在调试器的输出中成功。但是,我似乎无法debugDescription
使用该属性。
请注意,我的实际目标是做我之前在 Objective-C 中所做的事情(有关详细信息,请参阅此问题),但到目前为止,我还在为如何在 Swift 中做到这一点而苦苦挣扎。
swift - 如何使用字符串键和 NSManagedObjects 数组作为值来限制字典的扩展
我想在 Dictionary 上添加一个扩展,该扩展仅适用于以字符串为键且 NSManagedObject 数组为值的字典
理想情况下,它看起来像这样:
或者
如果我只设置Value : NSManagedObject
,它可以工作。但如果它是一个数组,则不是。有谁知道这个的解决方法?
swift - 测试 Swift Optionals 的惯用方法
我不是在问这些扩展是否是一个好主意,这只是一个思想实验,我试图从实践中学习。
同意克里斯蒂安·拉特纳(Christian Lattner)的观点,这种方法通常更可取,我想我会尝试能够表达:
和
在实现它时,我发现自己很好奇以下实现中的一个或另一个是否比另一个更可取,以及出于什么原因?一个会比其他的更有效率。是否会有一种更好的边缘情况。
解决方案1:
解决方案2:
ios - Xcode 只能看到编写在单独文件中的嵌套类的一些类似扩展
我试图通过使方法和文件尽可能短并使用嵌套类进行命名空间来使我的代码尽可能可读。它工作正常,除了一些非常奇怪的时刻。
我有一些用于命名空间的类。
该类中使用的所有类都作为扩展在它们自己的文件中实现。
其中一个SomeClasses
有许多非常复杂的初始化程序,所以我也将它们拆分为自己的文件,并按如下方式实现:
问题是其中一些文件工作得很好,但其中一些会抛出'SomeClass' is not a member type of 'Space'
,我不知道为什么。
它们都非常相似。唯一的区别是初始化程序本身的实现。所有文件都保存在同一个地方,我不知道为什么其中一些可以正常工作而有些不能。
我试图将代码从不工作的文件移动到工作正常且工作的文件中——Xcode 同意查看代码并且没有反对它。但是当相同的代码位于它自己的文件中时——Xcode 或编译器不想理解它SomeClass
真的是Space
.
我试图清理构建,包括手动转储~/Library/Developer/Xcode/DerivedData
文件夹。没有什么帮助。
当然,我可以将它们全部放在一个文件中,它会正常工作,但在我的情况下它如此挑剔的原因是什么?
我试图创建一个新文件并将其中一个坏文件中的所有内容移到那里。它有效,但仅适用于某些文件名。有些名称再次给出相同的错误,但似乎如果名称是全新的并且与任何现有名称都不相似 - 它可以工作。魔法?
swift - 通过遵循 Swift 2 中的协议来扩展类型化数组
我想扩展一个类型化数组Array<SomeType>
,使其符合协议SomeProtocol
。现在我知道您可以扩展一个类型化数组,如下所示:
您还可以扩展对象以符合如下协议:
但我无法弄清楚让类型化数组符合协议的正确语法是什么,例如:
任何 Swift 2 专家都知道如何做到这一点?