2015-09-07 20 views
6

Trong nhanh chóng, tôi đã một lớp School, nó có một đặc tính students loại [AnyObject]!Không thể gán một giá trị kiểu 'NSArray' đến một giá trị của loại '[AnyObject]'

class School : NSObject { 
    var students: [AnyObject]! 
    ... 
} 

Tôi có một ví dụ của School và một số NSArray của chuỗi đại diện cho tên của học sinh. Tôi muốn gán biến NSArray này để students:

var school = School() 
var studentArray : NSArray = getAllStudents() 

//ERROR:Cannot assign a value of type 'NSArray' to a value of type '[AnyObject]' 
school.students = studentArray 

Tại sao lỗi này? Không phải mảng trong tương thích nhanh chóng với NSArray trong mục tiêu c ??? Làm thế nào để thoát khỏi lỗi trình biên dịch trên?

+0

Sử dụng loại thực tế trong khai báo cho phép trình biên dịch thực thi các bài tập thường là "điều tốt". – zaph

Trả lời

6

var students là một mảng Swift và mong muốn đối tượng thuộc loại AnyObject, nhưng bạn hãy thử gán cho nó NSArray. Hai đối tượng không cùng loại và không hoạt động.

Nhưng, cho rằng NSArray tương thích với [AnyObject], bạn có thể sử dụng typecasting đơn giản để làm cho NSArray thành một mảng Swift:

school.students = studentArray as [AnyObject] 

Tất nhiên một cách tiếp cận tốt hơn là nên ở lại trong thế giới Swift và quên NSArray hoàn toàn nếu có thể, bằng cách làm cho getAllStudents trả về một mảng Swift thay vì một NSArray. Không chỉ bạn sẽ tránh phải làm các kiểu báo nhưng bạn cũng sẽ được hưởng lợi từ sức mạnh của các bộ sưu tập Swift.

2

Âm thanh như school.students được định nghĩa là bắt buộc và có thể là con số không vì thế nếu bạn chắc chắn rằng không nil của nó - Unwrap nó đầu tiên bằng cách sử dụng:

school.students as AnyObject! as NSArray 

HOẶC

school.students! as NSArray 
0

Phương pháp của tôi được viết trong đối tượng c trả về NSMutableArray loại "Cơ sở dữ liệu"

-(NSMutableArray *)AllRowFromTableName:(NSString *)tableName; 

Trong nhanh chóng, tháng mười hai LARE biến như

var petListArray: NSMutableArray = [] 

Lưu trong mảng mô hình như

self.petListArray = self.dataBase.AllRowFromTableName("InsuranceTable") 

Được sử dụng trong cellForRowAtIndexPath

let tempDBObject = self.petListArray[indexPath.row] as! Database 
cell?.petName.text = tempDBObject.Hname 

hy vọng điều này giúp đỡ một ai đó.

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