问题标签 [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.
objective-c - 何时使用类扩展在 .m 文件中创建初始化方法?
我正在阅读 Apple 的教程之一(您的第二个 iOS 应用程序)。基本上,您有一个主数据类和一个数据控制器类。控制器类通过创建包含它们的数组来操作主要数据对象。
突然出现这个:
“...但是“创建主集合”任务是只有数据控制器对象需要知道的任务。由于此方法不需要暴露给其他对象,因此您无需在标头中声明文件。”
事实证明,“主集合”的初始化作为类扩展而不是头文件出现在 .m 文件中。我们为什么要这样做?直接在头文件中声明初始化方法有什么问题?
数据控制器的头文件:
这是相应的 .m 文件:
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
objective-c - ObjectiveC:在哪里声明私有实例属性?
我有以下类接口:
然后执行:
这就是苹果人在 WWDC 中展示的内容,但是有什么理由不将 _privateProperty 放在类扩展中,例如:
谢谢!
c# - Dotfuscator WP7 版和 EnumExtention:友谊不起作用
在我们的应用程序中,我们对 Enum 进行了扩展
在项目的某个地方,我们有一些 Enum 和一些 Func
在发布模式下构建后,一切都很好,我们得到了这个:
“_true 是:true 和 _false 是:false”
但是在 Dotfuscator 处理代码之后,我们得到了以下信息:
“糟糕!MethodNotFoundException”
并且所有功能都设置为是
Dotfuscator 版本:PreEmptive ver4.9.7000 WindowsPhoneEdition
扩展有什么问题?
PS对不起我的英语。
objective-c - 为什么这个类别有效?类别与类扩展
这就是我在我的一个类的实现文件中的内容......
代码设置 #1
使用此代码,一切正常,并记录“someString”。
但是我的代码不应该以某种方式看起来不同吗?我实际上是偶然使用该类别的(我复制/粘贴了一些东西,但没有注意到“PrivateMethods”在那里;我的意思是使用类扩展)。
我的代码不应该看起来像以下之一:
代码设置 #2
或者:
代码设置#3
在这种情况下发生的事情背后的细微差别是什么?代码设置 #1 与代码设置 #2 有何不同?
编辑:关于设置 #3 的问题
像这样设置它会完成什么?这甚至会“工作”吗?
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 会设置?
ruby-on-rails - 如何包含所有 lib 文件夹?
我想用简单的方法扩展核心 Array 类:
我将 array.rb 放入 lib/core_ext 并尝试在 application.rb 中通过
但是undefined method 'to_hash' for ["var1", "var2", "var3"]:Array
如果尝试在模型方法中使用它仍然会得到。当然,我在代码更改后重新启动了服务器。
objective-c - 如何避免子类无意中覆盖超类私有方法
我正在编写一个库,它可能会被不是我的人使用。
假设我写了一个类:
有趣的类.h
有趣的课堂.m
如果有人稍后使用该库并决定创建一个子类InterestingClass
怎么办?:
有趣的子类.h
有趣的子类.m
未来的图书馆用户可以从公共接口中看到它initWithIdentifier
是超类的一个方法。如果他们重写此方法,他们可能会(正确地)假设该superclass
方法应该在子类实现中调用。
但是,如果他们定义了一个方法(在子类私有接口中)无意中与超类“私有”接口中的不相关方法同名,该怎么办?如果没有他们阅读超类的私有接口,他们不会知道他们不仅创建了一个新方法,而且还覆盖了超类中的某些内容。子类实现最终可能会被意外调用,而超类在调用方法时期望完成的工作将无法完成。
我读过的所有 SO 问题似乎都表明这只是 ObjC 的工作方式,并且没有办法绕过它。是这种情况,还是我可以做些什么来保护我的“私有”方法不被覆盖?
或者,有什么方法可以限制从我的超类调用方法的范围,这样我就可以确定将调用超类实现而不是子类实现?
objective-c - Objective-C 类扩展
作为一个相当新的 Objective-c 程序员(有 4 年的 Java 经验),我似乎很难理解何时使用类扩展。据我了解(如果我错了,请纠正我),类别和扩展之间的主要区别在于,扩展希望您在主实现中实现方法,而对于一个类别,它可以在另一个实现中. 人们似乎也主要将扩展用于私有方法。
这是我的第一个问题。使用类扩展声明私有方法和根本不声明它有什么区别(在这两种情况下似乎都在运行中编译)?(示例 1 与 2)
示例 1
示例 2
第二个问题:在扩展中声明 ivars 和在实现中直接声明有什么区别?(例 3 对 4)
示例 3
示例 4
我有一个关于编码约定的最后一个问题:我什么时候应该在变量名前加上下划线 (_)?
谢谢
ios - 从 self 创建 NSMutableString 时出现 NSString+Extension 警告
在我创建的 iphone 应用程序和 NSString 的扩展类中。
NSString+Extensions.m
班级
在其中一种方法中,我需要将字符串转换为 NSMutableString。
我试着用这个:
但它发出警告:
据我所知,self 是对我调用该方法的字符串的引用,对吧?那么为什么它不应该是 NSString* 类型呢?知道我可以对自己使用通常的 NSString 方法。
对这个问题有任何想法吗?
谢谢