SMDev
SMDev

Reputation: 85

Empty Array of AnyObject in Swift

Im declaring and empty array to be used with a fetch request as followed:

var myList: Array<AnyObject> = []

However, was this code entered, I get this message that pops up and disables the editor: "SourceKitService Terminated. Editor Functionality temporarily limited"

Anybody know what this is about? Should I be declaring my array differently using Swift. I want an array to store my fetch request.

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

Here is the whole code:

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.
}
*/

}

Upvotes: 2

Views: 4590

Answers (2)

Santhosh Reddy
Santhosh Reddy

Reputation: 105

The simplest way of declaring Empty array for any type of object in swift is

    var emptyArray = [AnyObject]()

Upvotes: 2

codester
codester

Reputation: 37189

No this is perfectly fine. This error was coming because of problem in Xcode Close your xcode and try again

var myList: Array<AnyObject> = []

I have tested it on Xcode beta 3

There are also other syntax to declare array.You can use in xcode beta 3

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

in xcode beta 1 & 2

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

EDIT Actually problem is not of mylist.As you comment the myList: Array<AnyObject> = [] line this will create error so compiler stops compiling.If you remove error by hard-coding the values it start giving sourcekiterror again.

Actual problem is in this line

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

remove the ? from tableView? as this is not needed.It is for declaring optional not for unwrapping.For unwrapping you can use !.But as tableView: UITableView! is declared as implicit optional so it will unwrap automatically.No need to do any unwrapping. Replace the cellForRowAtIndexPath: with below function all will work fine.

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
}

Upvotes: 0

Related Questions