【问题标题】:Empty Array of AnyObject in SwiftSwift 中 AnyObject 的空数组
【发布时间】:2014-07-19 19:54:03
【问题描述】:

我声明一个空数组用于获取请求,如下所示:

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

}

【问题讨论】:

    标签: arrays swift


    【解决方案1】:

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

        var emptyArray = [AnyObject]()
    

    【讨论】:

      【解决方案2】:

      不,这完全没问题。 由于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 和 2 中

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

      编辑实际上问题不在于mylist。当您评论myList: Array&lt;AnyObject&gt; = [] 行时,这将产生错误,因此编译器停止编译。如果您通过硬编码它开始给出的值来消除错误再次sourcekiterror。

      实际问题在这一行

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

      tableView? 中删除?,因为这不是必需的。它用于声明可选而不是用于展开。对于展开,您可以使用!。但由于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
      }
      

      【讨论】:

      • 我已经多次退出程序,重新启动计算机等。如果我注释掉这段代码,那么它就可以正常工作。他们是关于触发它的这条线的东西。
      • @ScottMuhs 您使用的是哪个 xcode beta 版本??
      • hmmm....你建议的这两种新方法都会导致同样的事情发生。
      • 尝试 var myList: Array = Array() 和 var myList2: [AnyObject] = []
      • 另外...如果我从 numberOfRowsInSection 中删除 myList.count,错误就会消失。会不会是这个?
      猜你喜欢
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      相关资源
      最近更新 更多