Answers:
正如其他人指出的那样,可可/目标C下有许多种“空”。但是要注意的另一点是,[title isKindOfClass:[NSNull class]]毫无意义,因为据记载[NSNull null]是一个单例,这样您就可以检查指针是否相等。请参阅可可主题:使用Null。
因此,一个好的测试可能是:
if (title == (id)[NSNull null] || title.length == 0 ) title = @"Something";
注意如何使用这样的事实:即使title为nil,title.length仍将返回0 / nil / false,即在这种情况下为0,因此您不必对其进行特殊处理。这是Objective C的新手很难适应的东西,尤其是来自其他语言的消息/方法调用失败的情况。
Map
项目的值(null
在Dart中)不对应nil
或不符合NULL
目标C的原因。原因是它实际上是NUNull null
,而不是NULL
null。谢谢@PeterNLewis!
就这么简单
if([object length] >0)
{
// do something
}
请记住,在目标C中,如果object为null,它将返回0作为值。
这将使您同时得到一个空字符串和一个长度为0的字符串。
object = @"";
或object = nil;
)
这些“对我有用的答案”怎么办?我们都用相同的语言编码,规则是
那将是对所有人有用的。如果给定的解决方案仅对您“有效”,那是因为您的应用程序流程不允许引用为null或字符串长度为0的情况。执行此操作的正确方法是将处理的方法在任何情况下都想要什么。
nil
(注意:不是“ null”),则发送消息(如length
)将产生0(或该方法的返回类型的适当0值)。那是语言的规则。nil
在这种情况下,无需单独检查。
如果要对所有零/空对象(例如空字符串或空数组/集)进行测试,则可以使用以下命令:
static inline BOOL IsEmpty(id object) {
return object == nil
|| ([object respondsToSelector:@selector(length)]
&& [(NSData *) object length] == 0)
|| ([object respondsToSelector:@selector(count)]
&& [(NSArray *) object count] == 0);
}
有两种情况:
一个对象可能是[NSNull null]
,或者不可能。
您的应用程序通常不应该[NSNull null];
仅在要将“ null ”对象放入数组中或用作字典值时才使用它。然后,您应该知道哪些数组或字典可能包含空值,哪些可能不包含空值。
如果您认为数组永远不包含[NSNull null]
值,则不要检查它。如果存在[NSNull null]
,您可能会遇到一个异常,但这很好:Objective-C异常表明编程错误。而且您遇到了编程错误,需要通过更改一些代码来解决。
如果可能存在对象[NSNull null]
,则可以通过测试非常简单地进行检查
(object == [NSNull null])
。调用isEqual
或检查对象的类是胡说八道。只有一个[NSNull null]
对象,普通的C运算符以最直接,最有效的方式对其进行检查。
如果检查的NSString
对象不能为[NSNull null]
(因为您知道它不能为对象,[NSNull null]
或者因为您刚刚检查了它与的不同[NSNull null]
,那么您需要问问自己如何处理空字符串,即长度为0的一个字符串。)将其视为null
类似字符串nil
,然后测试(object.length == 0)
。如果object.length返回0,则object == nil
此测试覆盖nil个对象和长度为0的字符串object == nil
。
最后,如果要将字符串添加到数组或字典中,并且该字符串可能为nil,则可以选择不添加字符串,将其替换为@""
或将其替换为[NSNull null]
。替换为@""
意味着您失去了区分“无字符串”和“长度为0的字符串”的能力。替换为[NSNull null]
意味着在访问检查[NSNull null]
对象的数组或字典时必须编写代码。
你只是检查零
if(data[@"Bonds"]==nil){
NSLog(@"it is nil");
}
要么
if ([data[@"Bonds"] isKindOfClass:[NSNull class]]) {
NSLog(@"it is null");
}
例如,这是我用于安全字符串的宏,而不是在UILabel上获取“ (空) ”字符串:
#define SafeString(STRING) ([STRING length] == 0 ? @"" : STRING)
假设您有一个成员类和名称属性,名称为nil:
NSLog(@"%@", member.name); // prints (null) on UILabel
与宏:
NSLog(@"%@", SafeString(member.name)); // prints empty string on UILabel
干净漂亮😊
如果您希望在项目中检查nil Null和空字符串,则可以使用下面的扩展名:
NSString + Extension.h
///
/// Checks if giving String is an empty string or a nil object or a Null.
/// @param string string value to check.
///
+ (BOOL)isNullOrEmpty:(NSString*)string;
NSString + Extension.m
+ (BOOL)isNullOrEmpty:(NSString*)string {
if (string) { // is not Nil
NSRange range = [string rangeOfString:string];
BOOL isEmpty = (range.length <= 0 || [string isEqualToString:@" "]);
BOOL isNull = string == (id)[NSNull null];
return (isNull || isEmpty);
}
return YES;
}
if (![NSString isNullOrEmpty:someTitle]) {
// You can safely use on a Label or even add in an Array for example. Remember: Arrays don't like the nil values!
}
if(textfield.text.length == 0){
//do your desired work
}
尝试检查是否为空
if (text == nil)
@interface NSString (StringFunctions)
- (BOOL) hasCharacters;
@end
@implementation NSString (StringFunctions)
- (BOOL) hasCharacters {
if(self == (id)[NSNull null]) {
return NO;
}else {
if([self length] == 0) {
return NO;
}
}
return YES;
}
@end
NSString *strOne = nil;
if([strOne hasCharacters]) {
NSLog(@"%@",strOne);
}else {
NSLog(@"String is Empty");
}
这适用于以下情况,NSString *strOne = @""
或NSString *strOne = @"StackOverflow"
OR NSString *strOne = [NSNull null]
OR OR NSString *strOne
。
如果这种东西还不存在,则可以创建一个NSString类别:
@interface NSString (TrucBiduleChoseAdditions)
- (BOOL)isEmpty;
@end
@implementation NSString (TrucBiduleChoseAdditions)
- (BOOL)isEmpty {
return self == nil || [@"" isEqualToString:self];
}
@end
对我有用的是 if ( !myobject )
NSArray *testarray = [NSArray arrayWithObjects:[NSNull null],@"", nil]; NSString *string = [testarray objectAtIndex:0]; NSLog(@"null string value: %@",string); if (!string) { NSLog(@"string evaluates to null"); } if (string && (string==(id)[NSNull null])) { NSLog(@"string does not evaluate to null"); }
完整检查字符串是否为空条件可以如下:<\ br>
如果(mystring) { if([mystring isEqualToString:@“”]) { mystring = @“一些字符串”; } } 其他 { //声明 }
if ([linkedStr isEqual:(id)[NSNull null]])
{
_linkedinLbl.text=@"No";
}else{
_linkedinLbl.text=@"Yes";
}