簡體   English   中英

如何在Objective-C中傳遞多個參數?

[英]How do I pass multiple parameters in Objective-C?

我已經閱讀了幾篇關於Objective-C方法語法的帖子,但我想我不了解一個方法的多個名稱。

我正在嘗試創建一個名為getBusStops的方法, getBusStops包含NSStringNSTimeInterval參數以及返回類型NSMutableArray 這是我構建方法的方法,但它在運行時顯然會出錯:

- (NSMutableArray *)getBusStops:(NSString *)busStop
                                (NSTimeInterval *)timeInterval;

我看到了一個方法的另一個例子:

-(NSInteger)pickerView:(UIPickerView *)pickerView
            numberOfRowsInComponent:(NSInteger)component

我不明白為什么這個方法有每個參數的方法名稱。 我應該做同樣的事情:

- (NSMutableArray *)getBusStops:(NSString *)busStop
                        forTime:(NSTimeInterval *)timeInterval

您需要至少用“:”分隔每個參數名稱。 從技術上講,該名稱是可選的,但建議其可讀性。 所以你可以寫:

- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;

或者你的建議:

- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;

Objective-C沒有命名參數,因此冒號左側的所有內容都是方法名稱的一部分。 例如,

getBusStops: forTime:

是方法的名稱。 該名稱被拆分,因此它可以更具描述性。 你可以簡單地命名你的方法

getBusStops: :

但這並沒有告訴你太多第二個參數。

是; Objective-C方法的語法是這樣的,原因有兩個: 其中一個是明確你指定的參數是什么。 例如,如果要在某個索引處將對象添加到NSMutableArray ,則可以使用以下方法執行此操作:

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

此方法稱為insertObject:atIndex:並且很明顯在指定的索引處插入了一個對象。

在實踐中,添加一個字符串“Hello,World!” NSMutableArray被稱為array索引5處將被調用如下:

NSString *obj = @"Hello, World!";
int index = 5;

[array insertObject:obj atIndex:index];

這也減少了方法參數順序之間的歧義,確保首先傳遞object參數, 然后傳遞index參數。 當使用帶有大量參數的函數時,這會變得更有用,並減少傳遞參數時的錯誤。

此外,方法命名約定是這樣的,因為Objective-C不支持重載; 但是,如果您想編寫一個執行相同工作但采用不同數據類型的方法,則可以完成此操作; NSNumber類為例; 這有幾種對象創建方法,包括:

  • + (id)numberWithBool:(BOOL)value;
  • + (id)numberWithFloat:(float)value;
  • + (id)numberWithDouble:(double)value;

在諸如C ++之類的語言中,您只需重載數字方法以允許將不同的數據類型作為參數傳遞; 但是,在Objective-C中,此語法允許通過更改函數的每個變體的方法名稱來實現相同函數的幾個不同變體。

每個參數之前的文本是方法名稱的一部分 從您的示例中,實際上是方法的名稱

-getBusStops:forTime:

每個:代表一個論點。 在方法調用中,方法名稱在:s處拆分,參數顯示在:seg之后

[getBusStops: arg1 forTime: arg2]

for create方法:

-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second {
//method definition...
}

用於調用方法:

[mymethods:self.contoCorrente withsecond:self.asecond];
(int) add: (int) numberOne plus: (int) numberTwo ;
(returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa

我:

(returnTypeOfSecontArgument) secondArgumentName ;

和其他語言一樣,我們使用以下語法void add(int one, int second)但是在OBJ_c中分配參數的OBJ_c是不同的,如上所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM