2013-02-25 15 views
41

Có cách nào ngắn để nói "toàn bộ chuỗi" hơn là gõ ra:Phím tắt để tạo NSRange cho toàn bộ chiều dài của NSString?

NSMakeRange(0, myString.length)] 

Có vẻ như ngớ ngẩn rằng phần dài nhất của loại mã này là quan trọng nhất (vì tôi thường muốn tìm kiếm/thay thế trong toàn bộ chuỗi)…

[myString replaceOccurrencesOfString:@"replace_me" 
          withString:replacementString 
          options:NSCaseInsensitiveSearch 
           range:NSMakeRange(0, myString.length)]; 
+0

Nếu bạn cần nhiều hơn 5 lần, sau đó bạn có thể làm cho một phương pháp/category, Nhưng đối với dưới 5 lần 'NSMakeRange (0, myString.length)]' của bạn sẽ ngắn hơn, phải không? –

Trả lời

37

Chức năng? Phương pháp danh mục?

- (NSRange)fullRange 
{ 
    return (NSRange){0, [self length]}; 
} 

[myString replaceOccurrencesOfString:@"replace_me" 
          withString:replacementString 
          options:NSCaseInsensitiveSearch 
           range:[myString fullRange]]; 
+6

Hah. Thật tuyệt vời khi cả hai chúng tôi đặt tên nó là 'fullRange' và cả hai chúng tôi đều sử dụng các ký tự hợp chất mới, cùng một lúc. –

+1

Thật vậy. Và nhận xét cùng một lúc! –

+0

Các chữ làm việc tốt, nhưng bạn cũng có thể trả về NSMakeRange (0, [độ dài tự]]; nếu bạn muốn. –

19

Tôi không biết. Nhưng bạn có thể dễ dàng thêm danh mục NSString:

@interface NSString (MyRangeExtensions) 
- (NSRange)fullRange 
@end 

@implementation NSString (MyRangeExtensions) 
- (NSRange)fullRange { 
    return (NSRange){0, self.length}; 
} 
+3

Geez, chúng tôi thậm chí đã cho nó cùng một tên. –

7

Đây không phải là ngắn, nhưng ... Oh cũng

NSRange range = [str rangeOfString:str]; 
+6

Thông minh. Nhưng tôi ngần ngại giới thiệu những gì có thể là rất nhiều công việc CPU (phù hợp với một chuỗi dài chống lại chính nó) vì lợi ích tương đối nhỏ của một chút ít đánh máy cho tôi lập trình viên. –

+0

Và bạn nói đúng, đôi khi thêm một chút mã làm cho nó dễ đọc và hiệu quả hơn. – Odrakir

+0

Tôi đã sử dụng tính năng này và gặp sự cố: nếu chuỗi của bạn bị trống (@ ""), bạn nhận được {NSNotFound, 0}. – Shinigami

6

Swift

NSMakeRange(0, str.length) 

hoặc như một extension:

extension NSString { 
    func fullrange() -> NSRange { 
     return NSMakeRange(0, self.length) 
    } 
} 
+0

Không có lý do gì để làm việc với 'NSString' trong Swift. –

+3

Đúng. Nhưng câu hỏi là "Phím tắt để tạo ra một NSRange cho toàn bộ chiều dài của NSString" – SwiftArchitect

+0

Câu hỏi cũng là về Objective-C. Nếu bạn sử dụng Swift, thì cũng sử dụng String. –

5

Swift 2:

extension String { 
    var fullRange:Range<String.Index> { return startIndex..<endIndex } 
} 

như trong

let swiftRange = "abc".fullRange 

hoặc

let nsRange = "abc".fullRange.toRange 
+0

Đối với '" abc ".fullRange.toRange', tôi nhận được lỗi biên dịch thời gian:" Giá trị của loại 'Phạm vi ' (aka 'Range ') không có thành viên 'toRange' . " Tôi đang chạy Xcode 8.3.3 với Swift 3.1. – ma11hew28

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