2015-02-17 12 views
30

Tôi có một tệp mở rộng lớp + mở rộng. Sau khi thêm một đại biểu mà tôi đã khai báo trong một tệp khác vào lớp, Xcode cho thấy "Tuyên bố chỉ hợp lệ ở phạm vi tệp" ở dòng mở rộng. Tôi không biết vấn đề là gì.Giới thiệu về "Tuyên bố chỉ hợp lệ ở phạm vi tập tin"

Có ai có thể giúp tôi khắc phục sự cố không?

class ListViewController: UIViewController, AddItemViewControllerDelegate {...} 

extension ListViewController: UITableViewDataSource{ 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
     performSegueWithIdentifier("ShowDetail", sender: indexPath) 
    } 

} 
+0

Bạn có thể hiển thị mã đang tạo lỗi này không? –

+0

@ 0x7fffffff ♦ có chắc chắn – Dennis

+2

chỉ trong trường hợp, đảm bảo rằng phần mở rộng của bạn là bên ngoài lớp học của bạn! :) – jomafer

Trả lời

66

Lỗi này là ở đâu đó trong bạn ... - Lỗi đó có nghĩa là lớp ListViewController của bạn không được đóng lại, vì vậy phần mở rộng đang được hiểu là lồng vào bên trong, như thế này:

class ListViewController { 
    ... 
    extension ListViewController { 
    } 
} 

Tìm thiếu dấu ngoặc ôm và bạn nên giải quyết vấn đề.

+0

Cảm ơn bạn đã trả lời. Tôi chỉ cần kiểm tra lại mã của tôi, lớp học được đóng lại chắc chắn. Hay nó là vấn đề của giao thức phù hợp? – Dennis

+0

Ồ, đúng — có lẽ thông báo lỗi chỉ là xấu. Phương thức đó thực sự thuộc về 'UITableViewDelegate'. Nếu bạn muốn phù hợp với 'UITableViewDataSource', bạn cần ít nhất' tableView: numberOfRowsInSection: 'và' tableView: cellForRowAtIndexPath: '. –

+0

Cảm ơn bạn! Nó hoạt động tốt. – Raja

12

Hãy chắc chắn rằng phần mở rộng được khai báo ở phần cuối của lớp học chính của bạn và sau dấu ngoặc nhọn cuối cùng "}"

 class ListViewController: UIViewController, AddItemViewControllerDelegate { 
//Make sure that everything is clean here! 
} 

    extension ListViewController: UITableViewDataSource{ 
     func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
      tableView.deselectRowAtIndexPath(indexPath, animated: true) 
      performSegueWithIdentifier("ShowDetail", sender: indexPath) 
     } 

    } 
10

Việc gia hạn phải ở cấp độ gốc - không nhúng chúng vào một hay bất cứ thứ gì.

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