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