相关疑难解决方法(0)

在Swift中为所有对象添加扩展/方法

在Objective-C中,所有对象都可以被视为类型id,几乎所有对象都从NSObject继承.(块没有,但这是唯一的例外.)

因此,可以创建一个扩展所有Objective-C对象的Objective-C类别.(忽略块)

在Objective-C中,我创建了一个NSObject的扩展,它使用关联的对象来选择将字典附加到任何NSObject.这使我能够实现方法setAssocValue:forKey:,并assocValueForKey:使得它可以将一个键/值对附加到任何NSObject的.这在很多情况下都很有用.

例如,它可以将存储的属性添加到类别中.您只需编写一个使用相关值方法附加存储对象的getter/setter,然后就可以了.

它还可以在运行时将值附加到现有系统对象.您可以在按钮上挂起数据或代码块,或者执行您需要执行的操作.

我想在Swift中做同样的事情.

但是,Swift没有像Objective-C那样的所有对象的公共基类.AnyObject并且Any是protcols.

从而,

extension AnyObject
Run Code Online (Sandbox Code Playgroud)

不会编译.

我不知道在Swift中"附加"我setAssocValue:forKey:assocValueForKey:方法的位置.

我可以为我的扩展创建一个基类,但这违背了使用扩展的要点.我可以使我的基础对象成为Objective-C NSObject,但这意味着我的所有对象必须是NSObjects,默认情况下Swift对象不是NSObjects.

(顺便说一下,这个问题适用于Mac OS和iOS平台)

oop methods swift

7
推荐指数
1
解决办法
1839
查看次数

在 Swift 中覆盖 NS*** 方法

为了提供一个备用的语言NSLocalizedString,我用这#undef#define在Objective-C:

#undef NSLocalizedString
#define NSLocalizedString(key, comment) @"NSLocalizedString has been replaced";
Run Code Online (Sandbox Code Playgroud)

如果从 Objective-C 调用,这非常有效,但如果从 Swift 调用,NSLocalizedString则忽略新的定义。(桥接头配置正确且工作正常)

这在 Swift 中是否可行,如果可以,如何实现?


注意:真正的例子在 Github 上,也可以在这里看到SO 答案

objective-c swift

5
推荐指数
1
解决办法
1250
查看次数

Swift“枚举”基础对象

如果要向每个对象添加扩展名,则可以执行以下操作:

extension AnyObject
{
     func myFunc() { ... }
}
Run Code Online (Sandbox Code Playgroud)

是否有类似的地方可以在每个枚举中添加函数?换句话说,每个枚举的基本“类”是什么?

cocoa enums swift

0
推荐指数
1
解决办法
400
查看次数

标签 统计

swift ×3

cocoa ×1

enums ×1

methods ×1

objective-c ×1

oop ×1