当你开发iOS应用程序,你会发现许多场合,当你需要编写自己的自定义类。当你需要与数据一起打包自定义行为的自定义类是有用的。在一个自定义的类,你可以定义你自己的行为来存储,操纵和显示数据。
例如,考虑在iOS的时钟应用程式的全球时钟标签。这些单元格在这个表视图需要显示比标准表视图单元更多的内容。这是为了实现一个子类,它扩展了的UITableViewCell的行为让你显示额外的自定义数据给定表视图单元格的好机会。如果你在设计这个自定义类,您可以添加网点为一个标签来显示未来信息和图像视图的时间显示自定义时钟上的单元格的右边。
本章将教你什么是你需要了解的Objective-C的语法和类结构来完成实现你的todolist的应用程序的行为。它讨论XYZToDoItem,这将代表您的待办事项清单上的单个项目的自定义类的设计。在第三个教程中,您将真正实现这个类,并把它添加到你的应用程序。
声明和实现一个类
一类在Objective-C的规范要求两个部分:接口和实现。该接口指定究竟如何在给定类型的对象的目的是要使用的其他对象。换句话说,它定义了类的与外界实例之间的公共接口。实施包括在接口中声明的每个方法的可执行代码。
一个对象应该被设计成隐藏其内部实现细节。在Objective-C,接口和实现通常放置在单独的文件,这样你需要做的只是公共接口。与C代码,你定义头文件和源文件,以公开声明从你的代码的实现细节中分离出来。接口文件具有.h扩展名,文件和实现文件具有.m的扩展。
一个对象应该被设计成隐藏其内部实现细节。在Objective-C,接口和实现通常放置在单独的文件,这样你需要做的只是公共接口。与C代码,你定义头文件和源文件,以公开声明从你的代码的实现细节中分离出来。接口文件具有.h扩展名,文件和实现文件具有.m的扩展。
接口(interface)
用于声明一个类接口的Objective-C的语法如下所示:
@interface XYZToDoItem : NSObject @end
这个例子声明了一个名为XYZToDoItem类,它继承自NSObject。
公共属性和行为的@接口声明中定义。在这个例子里,没有超出指定超类,所以预期可对XYZToDoItem的实例的唯一的行为是自NSObject继承的行为。所有对象都期望有一个最低的行为,因此默认情况下,他们必须继承自NSObject(或它的子类)。
实现(Implementation)
用于声明一个类实现了Objective-C的语法如下所示:
#import "XYZToDoItem.h" @implementation XYZToDoItem @end
如果声明中的类接口的任何方法,你需要实现它们在这个文件中。
存储一个对象的数据作为属性
考虑到待办事项需要持有什么样的信息。你可能需要知道它的名称,创建时间,以及是否它已经完成。在您的自定义XYZToDoItem类,你会在性能存储这些信息。
声明这些属性所在的接口文件(XYZToDoItem.h)内。下面是他们的样子:
声明这些属性所在的接口文件(XYZToDoItem.h)内。下面是他们的样子:
@interface XYZToDoItem : NSObject @property NSString *itemName; @property BOOL completed; @property NSDate *creationDate; @end
在这个例子中,XYZToDoItem类声明了三个公共属性。这些属性可用于全面的公众访问。随着公共访问,其他对象可以读取和改变属性的值。
你可能会决定申明一个属性不应该被改变(即,它应该是只读的)。来指示属性是否打算只读其中包括 - Objective-C的属性声明包括财产属性。举例来说,如果你不想要一个XYZToDoItem的创建日期是多变的,你可能会更新XYZToDoItem类接口看起来像这样:
@interface XYZToDoItem : NSObject @property NSString *itemName; @property BOOL completed; @property (readonly) NSDate *creationDate; @end
属性可以是私人或公共的。有时,它是有道理的,使一个私有财产,这样其他类不能查看或访问它。例如,如果你想保持一个代表项目被标记为不对此信息给予其他类别的访问,使私有财产通过把它在一个类扩展在你的实现文件的顶部(完成日期起财产轨道XYZToDoItem.m)。
#import "XYZToDoItem.h" @interface XYZToDoItem () @property NSDate *completionDate; @end @implementation XYZToDoItem @end
您可以访问使用getter和setter属性。吸气剂返回一个属性值,和setter改变它。一个常见的??语法速记访问getter和setter方法??是点符号。对于物业读取和写入访问,您可以使用点符号为获取和设置属性的值。如果你有类XYZToDoItem的对象的TodoItem,您可以执行以下操作:
toDoItem.itemName = @"Buy milk"; //Sets the value of itemName NSString *selectedItemName = toDoItem.itemName; //Gets the value of itemName