Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 斯威夫特酒店_Ios_Arrays_Swift - Fatal编程技术网

Ios 斯威夫特酒店

Ios 斯威夫特酒店,ios,arrays,swift,Ios,Arrays,Swift,因此,在学习swift时,我遇到了向数组属性添加值的问题。在向数组添加值后,当我尝试打印数组的第一个值时,我收到一个索引越界错误。如何向整个类都可以访问的数组属性添加值 class HomeViewController: UIViewController { var geofences = [Geofence]() override func viewDidLoad() { super.viewDidLoad() getFences()

因此,在学习swift时,我遇到了向数组属性添加值的问题。在向数组添加值后,当我尝试打印数组的第一个值时,我收到一个索引越界错误。如何向整个类都可以访问的数组属性添加值

class HomeViewController: UIViewController {

    var geofences = [Geofence]()

    override func viewDidLoad() {
        super.viewDidLoad()
        getFences()
        print(self.geofences[0])
    }

    func getFences() {
        var query = PFQuery(className:"Geofence")
        query.whereKey("username", equalTo: "Peter")
        query.findObjectsInBackgroundWithBlock {
            (fences: [PFObject]?, error: NSError?) -> Void in
            if error == nil && fences != nil {
                if let fences = fences {
                    for (index, element) in fences.enumerate() {
                        var unique_id = element.objectId
                        var fence_radius = element["radius"] as! Int
                        var fence_name = element["name"] as! String
                        var lat = element["centerPoint"].latitude
                        var lon = element["centerPoint"].longitude
                        var center = CLLocationCoordinate2D(latitude: lat, longitude: lon)
                        var new_fence: Geofence? = Geofence(uniqueID: unique_id!, radius: fence_radius, centerPoint: center, name: fence_name)
                        self.geofences.append(new_fence!)
                    }
                }
            } else {
                print(error)
            }
        }
    }

编辑:看来我把问题简单化了。下面是获取索引越界错误的代码。当我从Parse中检索geofence时,geofences数组将被填充,但一旦它退出getFences方法,数组将被清空。

很可能是在
getFences()
有时间填充数组之前运行了打印调用。您可以通过
查询之外的另一个打印调用来检查这一点。findObjectsInBackgroundWithBlock

我没有得到该代码的索引越界错误。您确定索引越界错误在您发布的代码中吗?我发布的代码与我的问题类似,但似乎过于简化了。我已经发布了我正在使用的代码。好的,我在getFences方法和External query.findObjectsInBackgroundWithBlock的末尾放了相同的print语句,出现了相同的错误。在getFences方法的末尾放置断点并检查self.geofines之后,数组将清空,我不知道为什么!作为一个有用的思维实验,假设findObjects块执行前需要30秒。Sp在该块中发生的任何事情,如填充geofences数组,都要在视图加载30秒后才会发生。将执行viewDidLoad函数,执行getFences函数,但不执行块。在此期间,您希望GeoFence包含哪些内容?[空阵列]尚未准备就绪时,您是否正在尝试访问它?[是]可能在findObjectsInBackgroundWithBlock中的枚举代码之前,方法末尾的打印调用仍在运行。在每次尝试时打印(NSDate())可能会让您知道。在任何情况下,您都可以创建一个新方法来处理您在findObjectsInBackgroundWithBlock末尾调用的数据。没错,我使用了while(self.geofines.isEmpty){print(“still empty”)}在它离开while循环后,它工作了