2013-01-05 20 views
14

Tôi đang cố gắng để đạt được tương đương với C# mã sau:Gán chuỗi rỗng chỉ khi biến là con số không (nhà điều hành ternary)

someStringValue = someStringValue ?? string.Empty; 

đâu nếu someStringValue là null, một giá trị của string.Empty (chuỗi rỗng : "") sẽ được chỉ định. Làm thế nào để đạt được điều này trong Objective-C? Là lựa chọn của tôi chỉ:

if(!someStringValue) 
    someStringValue = @""; 

Giải pháp nhờ @ Dave DeLong:

someStringValue = someStringValue ?: @""; 
+0

Tôi cảm thấy rằng 'nếu 'phiên bản đơn giản hơn và dễ đọc hơn trong Obj-C. – Sulthan

Trả lời

25

đơn giản, sử dụng nhà điều hành ternary.

someStringValue = someStringValue ? someStringValue : @""; 

Hoặc nếu bạn muốn macro, bạn cũng có thể làm điều đó. sử dụng

#if !defined(StringOrEmpty) 
    #define StringOrEmpty(A) ({ __typeof__(A) __a = (A); __a ? __a : @""; }) 
#endif 

mẫu:

someStringValue = StringOrEmpty(someStringValue); 
+33

... hoặc thậm chí chỉ 'someStringValue = someStringValue?: @" ";' –

+0

Cảm ơn bạn, Eric. Đây là những gì tôi đã hy vọng. @ DeLong, cảm ơn bạn cũng vì tinh giản nó, tôi cuối cùng đã đi với việc thực hiện của bạn. – alan

+1

@DaveDeLong Kinh nghiệm của tôi là JavaScript đã dạy tôi tránh các nhà khai thác apocryphal. Ngay cả khi tôi biết nó là gì, đồng đội của tôi có lẽ sẽ không và tôi muốn nó ngay lập tức rõ ràng. Điều đó đã được nói, 1 cho mẹo tuyệt vời. Tôi đã bỏ lỡ cái cũ 'a = b || c' ký hiệu và đó chỉ là những gì tôi đã tìm kiếm. – Eric

0

Nếu someStringValue là một biến lớp, bạn có thể thêm mã này vào tập tin .m bạn sở hữu chuỗi

- (void)setSomeStringValue:(NSString *)newSomeStringValue 
{ 
    if (!newSomeStringValue) newSomeStringValue = @""; 
    _someStringValue = newSomeStringValue; 
} 
+0

Tôi điều là sạch hơn ghi đè lên getter, không setter. – skywinder

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