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

objective-c - 何时使用类扩展在 .m 文件中创建初始化方法?

我正在阅读 Apple 的教程之一(您的第二个 iOS 应用程序)。基本上,您有一个主数据类和一个数据控制器类。控制器类通过创建包含它们的数组来操作主要数据对象。

突然出现这个:

“...但是“创建主集合”任务是只有数据控制器对象需要知道的任务。由于此方法不需要暴露给其他对象,因此您无需在标头中声明文件。”

事实证明,“主集合”的初始化作为类扩展而不是头文件出现在 .m 文件中。我们为什么要这样做?直接在头文件中声明初始化方法有什么问题?

数据控制器的头文件:

这是相应的 .m 文件:

0 投票
1 回答
1026 浏览

objective-c - 将代码从 Xcode 3 移动到 4 会产生错误:Cannot declare variable inside @interface or @protocol

我正在将我的旧 iPhone 应用程序从 Xcode 3 迁移到 Xcode 4。我在用于在 Xcode 3 中构建的代码上收到此错误——实际上我是故意这样写的,以隐藏其他模块的实现细节。然而,Objective-C 似乎发生了一些变化。此代码现在收到错误

不能在@interface 或@protocol 中声明变量。

请记住,这是 .m 文件顶部的代码,而不是 .h

0 投票
4 回答
8785 浏览

objective-c - ObjectiveC:在哪里声明私有实例属性?

我有以下类接口:

然后执行:

这就是苹果人在 WWDC 中展示的内容,但是有什么理由不将 _privateProperty 放在类扩展中,例如:

谢谢!

0 投票
1 回答
413 浏览

c# - Dotfuscator WP7 版和 EnumExtention:友谊不起作用

在我们的应用程序中,我们对 Enum 进行了扩展

在项目的某个地方,我们有一些 Enum 和一些 Func

在发布模式下构建后,一切都很好,我们得到了这个:

“_true 是:true 和 _false 是:false”

但是在 Dotfuscator 处理代码之后,我们得到了以下信息:

“糟糕!MethodNotFoundException”

并且所有功能都设置为是

Dotfuscator 版本:PreEmptive ver4.9.7000 WindowsPhoneEdition

扩展有什么问题?

PS对不起我的英语。

0 投票
1 回答
225 浏览

objective-c - 为什么这个类别有效?类别与类扩展

这就是我在我的一个类的实现文件中的内容......

代码设置 #1

使用此代码,一切正常,并记录“someString”。

但是我的代码不应该以某种方式看起来不同吗?我实际上是偶然使用该类别的(我复制/粘贴了一些东西,但没有注意到“PrivateMethods”在那里;我的意思是使用类扩展)。

我的代码不应该看起来像以下之一:

代码设置 #2

或者:

代码设置#3

在这种情况下发生的事情背后的细微差别是什么?代码设置 #1 与代码设置 #2 有何不同?

编辑:关于设置 #3 的问题

像这样设置它会完成什么?这甚至会“工作”吗?

0 投票
2 回答
1134 浏览

objective-c - 关于objective-c中类扩展和继承的问题

我没有什么特别要实现的,但我正在尝试更多地了解类扩展。

这是直接来自苹果类别和扩展的类扩展的解释:

但是,假设我有一个扩展 MyClass 的 MyClass2,这对我来说确实很有意义:

所以我有几个问题,如果不涉及类扩展,我可以很容易地回答:

  • 在运行时,当我在MyClass中进行赋值self.value=2或只是调用float x=self.value时,调用了哪个 setter 和 getter @property?MyClass 还是 MyClass2 ?
  • 编译器不应该至少发出关于重新定义只读属性的警告吗?
  • 我知道@property 由 ivar 支持,那么到底有多少 ivar?与此相关,从MyClass2的角度调用相同的 self.value 哪个 ivar 会设置?
0 投票
1 回答
1113 浏览

ruby-on-rails - 如何包含所有 lib 文件夹?

我想用简单的方法扩展核心 Array 类:

我将 array.rb 放入 lib/core_ext 并尝试在 application.rb 中通过

但是undefined method 'to_hash' for ["var1", "var2", "var3"]:Array如果尝试在模型方法中使用它仍然会得到。当然,我在代码更改后重新启动了服务器。

0 投票
2 回答
1120 浏览

objective-c - 如何避免子类无意中覆盖超类私有方法

我正在编写一个库,它可能会被不是我的人使用。

假设我写了一个类:

有趣的类.h

有趣的课堂.m

如果有人稍后使用该库并决定创建一个子类InterestingClass怎么办?:

有趣的子类.h

有趣的子类.m

未来的图书馆用户可以从公共接口中看到它initWithIdentifier是超类的一个方法。如果他们重写此方法,他们可能会(正确地)假设该superclass方法应该在子类实现中调用。

但是,如果他们定义了一个方法(在子类私有接口中)无意中与超类“私有”接口中的不相关方法同名,该怎么办?如果没有他们阅读超类的私有接口,他们不会知道他们不仅创建了一个新方法,而且还覆盖了超类中的某些内容。子类实现最终可能会被意外调用,而超类在调用方法时期望完成的工作将无法完成。

我读过的所有 SO 问题似乎都表明这只是 ObjC 的工作方式,并且没有办法绕过它。是这种情况,还是我可以做些什么来保护我的“私有”方法不被覆盖?

或者,有什么方法可以限制从我的超类调用方法的范围,这样我就可以确定将调用超类实现而不是子类实现?

0 投票
5 回答
31442 浏览

objective-c - Objective-C 类扩展

作为一个相当新的 Objective-c 程序员(有 4 年的 Java 经验),我似乎很难理解何时使用类扩展。据我了解(如果我错了,请纠正我),类别和扩展之间的主要区别在于,扩展希望您在主实现中实现方法,而对于一个类别,它可以在另一个实现中. 人们似乎也主要将扩展用于私有方法。

这是我的第一个问题。使用类扩展声明私有方法和根本不声明它有什么区别(在这两种情况下似乎都在运行中编译)?(示例 1 与 2)

示例 1

示例 2

第二个问题:在扩展中声明 ivars 和在实现中直接声明有什么区别?(例 3 对 4)

示例 3

示例 4

我有一个关于编码约定的最后一个问题:我什么时候应该在变量名前加上下划线 (_)?

谢谢

0 投票
2 回答
206 浏览

ios - 从 self 创建 NSMutableString 时出现 NSString+Extension 警告

在我创建的 iphone 应用程序和 NSString 的扩展类中。

NSString+Extensions.m班级

在其中一种方法中,我需要将字符串转换为 NSMutableString。

我试着用这个:

但它发出警告:

据我所知,self 是对我调用该方法的字符串的引用,对吧?那么为什么它不应该是 NSString* 类型呢?知道我可以对自己使用通常的 NSString 方法。

对这个问题有任何想法吗?

谢谢