簡體   English   中英

無法將類型'NSArray'的值分配給類型'[AnyObject]'的值

[英]Cannot assign a value of type 'NSArray' to a value of type '[AnyObject]'

在swift中,我有一個School類,它有一個類型為[AnyObject]!students屬性[AnyObject]!

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

我得到了一個School的實例,以及一個代表學生姓名的NSArray字符串。 我想將這個NSArray變量分配給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

為什么這個錯誤? 是不是swift中的數組與目標c中的NSArray兼容? 如何擺脫上面的編譯器錯誤?

你的var students是一個Swift數組,並期望AnyObject類型的AnyObject ,但你嘗試為它分配一個NSArray 這兩個對象的類型不同,不起作用。

但是,鑒於NSArray[AnyObject]兼容,您可以使用簡單的類型轉換將NSArray轉換為Swift數組:

school.students = studentArray as [AnyObject]

當然,更好的方法是留在Swift世界並盡可能地忘記NSArray,方法是讓getAllStudents返回一個Swift數組而不是NSArray。 您不僅可以避免必須進行類型轉換,還可以從Swift集合的強大功能中受益。

聽起來像school.students被定義為Optional,因此如果你確定它不是nil可能是nil - 首先使用!解包它:

school.students as AnyObject! as NSArray

要么

school.students! as NSArray

我在object c中編寫的方法返回類型為“Database”的NSMutableArray

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

在swift中我聲明變量為

var petListArray: NSMutableArray = []

將模型數組保存為

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

用於cellForRowAtIndexPath

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

希望這有幫助的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM