问题标签 [class-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 回答
2244 浏览

objective-c - 类扩展如何作为实现私有方法的一种手段

我相信在 Objective-C 中声明“私有方法”的一种流行方式是创建它的类扩展并声明您想要设为私有的方法。

我想更详细地了解类扩展如何使这些方法作为私有方法工作。

  • 更新:我用不正确的术语空类别问了这个问题。我现在将其更改为类扩展
0 投票
2 回答
218 浏览

objective-c - 类扩展的语法是否改变了?

我有如下代码:

在 XCode 4.0.2 中编译时效果很好

现在我对 XCode 4.2 + iOS SDK 5.0 进行了升级(已经为这个愚蠢的想法责备自己)并且出现错误“预期标识符或 '(' 在 '{' 标记之前”。

任何帮助将非常感激。

0 投票
4 回答
610 浏览

objective-c - 为什么要让一个类私下遵守协议?

我一直在查看 Apple 的MVCNetworking 示例项目,其中的部分接口定义让AppDelegate我感到困惑。在 .h 文件中,我们有这个:

但是在 .m 文件中,我们有这个:

所以这个类是私下遵守协议的。但是你为什么要这样做而不是在标题中公开声明呢?

0 投票
5 回答
3232 浏览

java - 创建一个类的扩展?

在 C# 和 Objective C 等某些语言中,您可以创建类扩展。这意味着您可以向现有类添加其他方法,而无需扩展该类。这在Java中可能吗?

0 投票
1 回答
290 浏览

iphone - 将实例变量添加到 NSData

因此,我知道 Objective-C 中的类别可用于向类添加方法,而无需子类化。我也明白这些类别不能用于向类添加实例变量。

我做了一点关于类扩展的阅读,它可用于添加实例变量,但我不明白如何使用类扩展来修改现有的类,例如 NSData。

我的问题如下:

我有一个包含 NSURL 和 NSData 的核心数据模型。NSData 显示 NSURL 的数据。当视图需要显示数据时,我会进行以下检查: --- 如果 [NSData bytes] > 0,则显示 NSData。--- 否则,在 NSURL 获取数据并在返回时显示数据

很简单。但是,当 NSURL 更新时,我遇到了问题。因此,如果我用新图像修改 NSURL 路径,因为 [NSData bytes] 已经大于 0,我不会进行额外调用来获取新图像。

我想做的是向 NSData 添加一个名为 URLKey 的实例变量,该变量将保存有关数据来源的信息。我不能继承 NSData,因为我使用的是 CoreData。

有谁知道一些简单的解决方案?也许我对类扩展的理解存在差距,或者也许没有简单的方法。

0 投票
1 回答
267 浏览

ruby - 在 ruby​​ 中扩展/修补库的最干燥方法是什么?

我想知道用 ruby​​ 编写现有库的模块化扩展以改变现有方法的最佳方法是什么。它不应引入代码重复,应仅按需使用。

我试图完成的具体任务是扩展 ruby​​ 的Net::FTP模块以支持一些不太符合标准的服务器。这样的扩展应该与标准兼容库恕我直言完全分开。

我认为需要一个额外的文件会非常好,因为这甚至不会构成在原始代码中进行某种切换的必要性。因此,对于我们不太有天赋的 FTP 服务器研究员来说,额外的内容require 'net/ftp/forgiving'将使原始库更加宽容。

然后,相关文件可以利用 ruby​​ 的开放类和模块架构来修补 FTP 类。为了修复上面链接的古怪行为示例,我需要修补Net::FTP#mkdir. 看起来像这样:

然而,这需要以某种方式缓存原始代码Net::FTP#mkdirNet::FTP#original_mkdir保持代码干燥。这可能吗?您对如何改进这种修补/扩展方法有任何进一步的建议吗?或者甚至可能完全不同的方法?

0 投票
1 回答
1041 浏览

objective-c - 将 ivar 放在类扩展中有什么问题?

根据此处的 Apple 文档,这应该适用于我的代码:

如果我不尝试声明 iVar,这将有效。一旦我添加了花括号以及它们之间的内容,我就会收到这个漂亮的红色警告:

'{' 标记之前的预期标识符或 '('

这里发生了什么?

0 投票
2 回答
1691 浏览

objective-c - *.h 和 *.m 文件中的两个接口

对不起我的英语,让我发自内心的说:) 在我工作的一个项目中,我注意到了一个有趣的时刻。

在 *.h 文件中声明接口:

在 *.m 文件中我找到了另一个接口。

为什么需要它?有什么意义呢?-我认为这是为了方便。是的?

0 投票
1 回答
115 浏览

objective-c - 关于类别的客观 C 解释?

在我的菜鸟头脑和程序中,当我为一个类创建一个类别时,我在一个新文件中创建它

NSArray+Shuffle.h and .m

但我注意到,当我创建例如一个 ViewController 时,

我在实施中有:

所以我的问题是:

是什么

部分?,这是用于类别吗?或者有什么用?,如果是用于类别,为什么在这里使用它而不是在一些新文件中?

谢谢!

0 投票
2 回答
206 浏览

objective-c - Objective-c 中的 C# 样式类扩展

经过大量的 C# 经验后,我只是在学习 Objective-c。我非常想念的一件事是能够在一个单独的项目中编写扩展方法,我可以在我的所有项目中引用它。这是一些天真的c#:

在 Visual Studio 中,我可以只添加一个引用 an using,而 bammyString.IsShortString()将是一个相当无用的方法。

所以我想我想写一个静态库,但我不确定我从那里去哪里。

还有一个问题,如果我确实编写了这个静态库,我是否能够使用一个#import指令在库中的各种文件中使用所有方法,还是必须单独导入每个标头?