Swift中AnyObject的空数组

时间:2014-07-19 19:54:04

标签: arrays swift

我声明并清空要用于获取请求的数组,如下所示:

var myList: Array<AnyObject> = []

但是,如果输入此代码,我会弹出这条消息并禁用编辑器: “SourceKitService已终止。编辑器功能暂时受限”

有人知道这是关于什么的吗?我应该使用Swift以不同的方式声明我的数组。我想要一个数组来存储我的获取请求。

myList = context.executeFetchRequest(freq, error: nil)

以下是整个代码:

import UIKit
import CoreData

class ListTableViewController: UITableViewController {

var myList: [AnyObject] = []

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewDidAppear(animated: Bool) {

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext
    let freq = NSFetchRequest(entityName: "List")

    //populate array
    myList = context.executeFetchRequest(freq, error: nil)

    tableView.reloadData()

}

// #pragma mark - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1
}

override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return myList.count
}


override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell? {
    let CellID:NSString = "Cell"
    var cell: UITableViewCell = tableView?.dequeueReusableCellWithIdentifier(CellID) as UITableViewCell


    return cell
}


/*
// Override to support conditional editing of the table view.
override func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
    // Return NO if you do not want the specified item to be editable.
    return true
}
*/

/*
// Override to support editing the table view.
override func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
    if editingStyle == .Delete {
        // Delete the row from the data source
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    } else if editingStyle == .Insert {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }    
}
*/

/*
// Override to support rearranging the table view.
override func tableView(tableView: UITableView!, moveRowAtIndexPath fromIndexPath: NSIndexPath!, toIndexPath: NSIndexPath!) {

}
*/

/*
// Override to support conditional rearranging of the table view.
override func tableView(tableView: UITableView!, canMoveRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
    // Return NO if you do not want the item to be re-orderable.
    return true
}
*/

/*
// #pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

}

2 个答案:

答案 0 :(得分:2)

在swift中为任何类型的对象声明Empty数组的最简单方法是

    var emptyArray = [AnyObject]()

答案 1 :(得分:0)

不,这完全没问题。 由于Xcode中的问题,此错误即将发生 关闭你的xcode,然后再试一次

var myList: Array<AnyObject> = []

我在Xcode beta 3

上测试了它

还有其他语法来声明array。您可以使用 在xcode beta 3中

var myList: Array<AnyObject> = Array<AnyObject>()
var myList2: [AnyObject] = []

在xcode beta 1&amp; 2

var myList: Array<AnyObject> = Array<AnyObject>()
var myList2: AnyObject[] = []

编辑实际上问题不属于mylist。当您评论myList: Array<AnyObject> = []行时,这会产生错误,因此编译器会停止编译。如果您通过硬编码删除错误它会再次开始出现sourcekit错误。

实际问题在于此行

      var cell: UITableViewCell = tableView?.dequeueReusableCellWithIdentifier(CellID) as UITableViewCell

?移除tableView?,因为这不是必需的。它用于声明可选的not for unwrapping。对于展开,您可以使用!。但是tableView: UITableView!是声明为隐式可选,因此它将自动解包。不需要进行任何展开。 将cellForRowAtIndexPath:替换为以下功能,一切正常。

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell? {
    let CellID:NSString = "Cell"
    //Removed ? from tableview?
    var cell: UITableViewCell = tableView?.dequeueReusableCellWithIdentifier(CellID) as UITableViewCell


    return cell
}