在展开Optional值时意外发现nil(可选绑定)

时间:2015-08-19 03:49:41

标签: xcode swift optional

//Google Map
var latitude = $('#google-map').data('latitude')
var longitude = $('#google-map').data('longitude')
function initialize_map() {
    var myLatlng = new google.maps.LatLng(latitude,longitude);
    var mapOptions = {
        zoom: 14,
        scrollwheel: false,
        disableDefaultUI: true,
        center: myLatlng
    };
    var map = new google.maps.Map(document.getElementById('google-map'), mapOptions);
    var contentString = '';
    var infowindow = new google.maps.InfoWindow({
        content: '<div class="map-content"><ul class="address">' + $('.address').html() + '</ul></div>'
    });
    var marker = new google.maps.Marker({
        position: myLatlng,
        map: map
    });
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map,marker);
    });
}
google.maps.event.addDomListener(window, 'load', initialize_map);
google.maps.event.addDomListener(window, 'resize', function() {
 var center = map.getCenter();
 google.maps.event.trigger(map, "resize");
 map.setCenter(center); 
});

}

作为一个标题,它一直在说#34;意外地发现nil,同时打开一个Optional值&#34;在我画的那条线上。

关于这个问题有很多问题,很难为我阅读代码,即使我不知所措,我也没有做好。

我应该在哪里使用可选绑定?

你可以用非常简单的例子来解释它是什么是可选绑定吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您需要在循环播放之前解开帖子,因为posts: [AnyObject]?是可选的。

if error == nil {
    if let postData = posts{
        //success fetxhing objects
        println(postData?.count)
        for post in postData! {
            self.imageFiles.append(post["imageFile"] as! PFFile)
            self.imageText.append(post["imageText"] as! String)
        }
        println(self.imageFiles.count)
    }
}else{            
    println(error)
}

答案 1 :(得分:0)

您的post字典不包含imageFile密钥。使用post["imageFile"]访问字典时,结果是值(如果密钥存在)和nil(如果密钥不存在)。您可以使用

区分这些情况
if let imageFile = post["imageFile"],
   let imageText = post["imageText"] {
     self.imageFiles.append(imageFile as! PFFile)
     self.imageText.append(imageText as! String)
} else {
     print("imageFile and/or imageText missing from \(post)")
}