1. 程式人生 > >03.OC物件操作

03.OC物件操作

字串的宣告

在OC中,用NSString類宣告的字串時一個物件

  • @建立字串
NSString * str = @"hello string";
  • 建立一個格式化的字串
NSString * formatStr = [NSString stringWithFormat:@"name=%s,age=%d","zhangsan",10];

字串輸出

NSLog(@"%@",str);

字串的操作介紹

  • 計算字串的長度
NSUInteger len = [str length];

length

方法計算的是個數

結構體作為物件屬性

  • 宣告和實現
#import <Foundation/Foundation.h>

typedef struct{
    int year;
    int month;
    int day;
} Date;

@interface User : NSObject
{
    @public
    NSString * _name;
    Date _birthday;
}

- (void) say;
@end

@implementation User

- (void) say{
    NSLog(@"name=%@,year=%i,month=%i,day=%i"
,_name,_birthday.year,_birthday.month,_birthday.day); } @end
  • 呼叫

首先建立物件

User * user = [User new];

我們在對結構體屬性進行賦值時,要注意,不能使用下面的方式

user->_birthday = {1999,1,1};

user->_birthday = {1999,1,1};這種方式是錯誤的,因為系統在賦值時,無法判斷{1999,1,1}是陣列還是結構體

對結構體屬性進行賦值,有三種方式

  1. 強制型別轉換
user->_birthday = (Date
){1999,1,1};
  1. 先建立一個結構體變數,然後將這個變數賦值給該屬性
Date d ={1999,1,1};
user->_birthday = d;
  1. 對結構體中的每一個變數分別進行賦值
user->_birthday.year = 1999;
user->_birthday.month = 1;
user->_birthday.day = 1;

將物件作為方法的引數

@interface Gun : NSObject

- (void)shoot;
@end

@implementation Gun

- (void)shoot{
    NSLog(@"shoot");
}

@end


@interface Soldider : NSObject

- (void)fire:(Gun *)gun;
@end

@implementation Soldider

- (void)fire:(Gun *)gun{
    [gun shoot];
}

@end

//主函式
int main(int argc, const char * argv[]) {
    Soldider *s = [Soldider new];

    Gun *g = [Gun new];
    [s fire:g];
    return 0;
}