Objective-C中的布尔评价
对不起,如果有人问我这样的问题,我想我懂布尔语,这让我感到困惑。在命令行obj-c程序中,BigNerdRanch的书中说,main函数返回0,这在布尔值中表示为false,这是一件好事,因为如果它返回true或1,则表示发生了错误 所以这本书后面的代码让我感到困惑Objective-C中的布尔评价,objective-c,cocoa,boolean-logic,Objective C,Cocoa,Boolean Logic,对不起,如果有人问我这样的问题,我想我懂布尔语,这让我感到困惑。在命令行obj-c程序中,BigNerdRanch的书中说,main函数返回0,这在布尔值中表示为false,这是一件好事,因为如果它返回true或1,则表示发生了错误 所以这本书后面的代码让我感到困惑 -(BOOL)readFromData (NSData *)data ofType:(NSString *)typeName error(NSError **)outError todoItems = [NSPropertyLi
-(BOOL)readFromData (NSData *)data ofType:(NSString *)typeName error(NSError **)outError
todoItems = [NSPropertyListSerialization propertyListWithData: data
options:NSPropertyListMutableContainers
format:NULL
error:outError
return (todoItems != nil);
这段代码基本上不会说,因为todoItems将加载数据,所以它的指针不会设置为nil,因此它将计算true,它将返回true作为方法的BOOL值,这意味着存在错误?我对此感到非常困惑。返回(todoItems!=nil)基本上意味着如果todoItems
为nil
,则表达式的计算结果为返回false如果todoItems
不是nil
,则返回true代码>
把它看作一个紧凑的if语句
编辑:很抱歉我误解了你的问题。但我实际上认为,这本书的作者正试图给你一个例子,说明如何使用返回值来指示错误。当出现错误时,loadfunction可能返回nil
,因此,程序将退出return true
,这是一个错误。请不要混淆返回BOOL的方法的语义与返回int
的main
函数的语义
在C语言中,许多函数返回一个表示成功或失败的int
值<代码>0通常意味着成功,而非零(不仅仅是1
)是某种错误代码。代码可以是任何非零的数字。这只是一个自70年代以来一直使用的惯例
当您编写一个返回BOOL
的方法时,您没有处理错误代码。要么是是
要么是否
<代码>否
通常表示失败,而是
表示成功
值NO
实际上是0
这一事实与使用0
表示成功的旧的标准C惯例毫无关系。不要混淆它们的意思
阅读BOOL
值的用法,就像阅读句子一样
if ([someClass readFromData...]) {
}
读这个就像它看起来一样。成功值YES
意味着它工作了,读取代码是有意义的。返回零的main()函数确实按照惯例意味着程序已干净地退出。如果有错误,您将从main()返回非零值。这些错误值可能具有特定于程序的含义,也可能是标准POSIX错误值
对于返回BOOL值的其他函数,由实现者指示YES表示成功还是失败(或者相反表示否)。在本例中-readFromData:ofType:error:如果存在非nil数据集,则返回YES。我没有这本书,但我想这意味着“是”意味着成功,而“否”意味着失败
换句话说,main()返回值的约定不一定与返回BOOL的函数返回值的约定相关,因为后者没有约定