从 self 创建 NSMutableString 时出现 NSString+Extension 警告
Posted
技术标签:
【中文标题】从 self 创建 NSMutableString 时出现 NSString+Extension 警告【英文标题】:NSString+Extension warning when creating a NSMutableString from self 【发布时间】:2013-03-04 12:55:53 【问题描述】:在我创建的 iphone 应用程序和 NSString 的扩展类中。
NSString+Extensions.m
类
在其中一种方法中,我需要将字符串转换为 NSMutableString。
我试过用这个:
NSMutableString * stringToManipulate = [NSMutableString stringWithString:self];
但它发出警告:
Incompatible pointer types sending 'const Class' to parameter of type 'NSString *'
据我所知,self 是对我调用该方法的字符串的引用,对吧?那么为什么它不应该是 NSString* 类型呢?知道我可以在 self 上使用常用的 NSString 方法。
对这个问题有什么想法吗?
谢谢
【问题讨论】:
【参考方案1】:检查该方法是声明为类方法(带有 + 符号)还是实例方法(带有 - 符号)。如果是第一种情况,编译器警告是正常的。然后将方法转为实例一
【讨论】:
是的,它是使用 + 符号声明的。无论如何,我可以在不将其更改为 - 的情况下完成这项工作?谢谢 不。类方法中的 self 是对类的引用,因此没有提供实例值。如果要使用实际值,只需实例化字符串,然后在其中调用 jnstance 方法。 对不起,我明白你的意思了。是的,就是这样,谢谢。我以为我必须更改 NSString+Extensions.m 名称中的 + :) 但你的意思是在方法中。抱歉,太晚了,我要睡觉了:)【参考方案2】:在 Objective-C 中,当您在类方法中调用 self
时,它会引用类对象。对于NSString
类方法,调用self
与调用[NSString 类] 相同。
所以,你的行是一样的:
NSMutableString * stringToManipulate = [NSMutableString stringWithString:[self class]];
如果您将方法从类一(+ 符号)更改为对象一(- 符号),它会起作用,但您必须以不同的方式调用它(来自 NSString
对象)。
如果您想进一步解释,您可以发布整个方法声明吗? 您还可以查看 NSObject 协议参考以获取有关 +class 方法的更多信息:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html
希望这会有所帮助,
【讨论】:
以上是关于从 self 创建 NSMutableString 时出现 NSString+Extension 警告的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 NSMutableString 数据并将其放在不同的字符串中? [关闭]
OC系列foundation Kit基础-NSMutableString
不可变字符串 NSString与可变字符串 NSMutableString