2012-08-09 25 views
13

Ở đây tôi có một phương thức mã hóa chuỗi (không đầy đủ) và bạn sẽ thấy sự cố của tôi là lỗi: "Chặn con trỏ tới loại không có chức năng không hợp lệ""Chặn con trỏ tới loại không hoạt động không hợp lệ"

+ (NSString *)encodeString: (NSString *)string { 
    __block int indexShift; 
    __block NSString *dictionary = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    __block NSString *encodeDictionary = @"mahgbcjdfukripylswxovzetqnFMAJWGCQYXLOETPBKSVNIZUHDR"; 
    __block NSString *encodeString = @""; 

    void (^encode) = ^{ // Error here, "Block pointer to non-function type is invalid" 
     for (int x = 0; x < string.length; x++) { 
      int index = [dictionary indexOf:[string characterAtIndex:x]]; 
      indexShift += index; 
      encodeString = [encodeString stringByAppendingFormat:@"%c", [encodeDictionary characterAtIndex:index+indexShift]]; 
     } 
    }; 

    return encodeString; 
} 

Hãy cho tôi biết tại sao điều này xảy ra, hoặc những gì tôi cần phải thay đổi để sửa chữa nó.

Trả lời

24

Cú pháp không chính xác để khai báo một khối nội tuyến. Dạng tổng quát như sau:

ReturnType(^block_name)(parmeter, types, here) = ^(parameter, types, here) { 

}; 

Vì vậy, bạn đang tìm kiếm:

void(^encode)() = ^() { 

}; 
+0

Yup đó đã làm nó – Wrsford

+1

Tập cuối cùng của dấu ngoặc đơn là không bắt buộc. Bạn chỉ có thể đi '^ {}' nếu kiểu khối không có đối số. –

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