2012-07-12 33 views
23

Khi tôi đang sử dụng định dạng chuỗi, tôi có thể truy cập một tham số nhiều lần mà không cần truyền lại không?"NSString stringWithFormat:" - Truy cập cùng một tham số nhiều lần?

Ví dụ:

NSString *parameter1 = @"1"; 
NSString *parameter2 = @"2"; 

NSString *myString; 
myString = [NSString stringWithFormat:@"I want to print parameter1 here: %@, parameter2 here: %@ and now access parameter1 again: %@ _without_ passing it again.",parameter1, parameter2, parameter1]; 

Có cách nào để truy cập vào các thông số đầu tiên một lần nữa mà không cần viết", argument1" một lần nữa?

Trả lời

54

Vâng, sử dụng đối số vị trí:

// prints: foo bar foo bar 
NSLog(@"%@", [NSString stringWithFormat:@"%[email protected] %[email protected] %[email protected] %[email protected]", @"bar", @"foo"]); 

// NSLog supports it too 
NSLog(@"%[email protected] %[email protected] %[email protected] %[email protected]", @"bar", @"foo"); 
+5

Lưu ý rằng trong chuỗi định dạng, bạn cần phải tham khảo tất cả các đối số được cung cấp trong danh sách đối số. ví dụ. Đoạn mã sau sẽ gây ra lỗi trong thời gian chạy, vì đối số vị trí đầu tiên không được sử dụng trong chuỗi định dạng: '[NSString stringWithFormat: @"% 2 $ @ ", @" bar ", @" foo "]' - xem http: //stackoverflow.com/questions/2946649/nsstring-stringwithformat-swizzled-to-allow-missing-format-numbered-args – mrb

+1

@mrb Phải. Đó là tác dụng phụ của các đối số biến ('...') trong C (không phải lỗi). Nếu bạn không cho biết chức năng định dạng kiểu đối số có (bằng cách tham chiếu đến nó ít nhất một lần), không có cách nào để định vị chính xác các đối số sau nó. – hamstergene

+0

tôi thử với predicateWithFormat nhưng không hoạt động. làm thế nào có thể sử dụng vị trí đối số cho vị từ? – Add080bbA

Các vấn đề liên quan