如何捕获可选swift字符串的所有边缘情况?

时间:2016-11-22 07:22:07

标签: ios swift optional

应用程序商店拒绝我的应用程序,并且我已将日志追溯到以下代码。我无法重现这个问题,也不能从我看到的代码中找到它。但也许改进函数的编写方式会导致我错过的边缘情况?

foreach($applications as $application){
    $id =  $application->user_id;
    echo '<div class="col-md-4" id="'.$id.'">',
              '<h4 class="list-group-item-heading remove-margin">
                    <i class="fa fa-plus fa-fw" id="'.$id.'"> </i>
               </h4>',
         '</div>';
}

具体来说:

 $(document).ready(function(){
            $('.fa-plus').click(function(){
                    counter = 0;
                    id      = $(this).closest('div').prop("id");
                    counter = counter+1;
                    $(this).css('color','green');
                    $('#votes-count').parent().html(counter);
                    alert(id);                  
            });

    });

jDateString的示例:func getNSDate(stringDate: String) -> NSDate { self.formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" guard (self.formatter.dateFromString(stringDate) != nil) else { return NSDate() } return self.formatter.dateFromString(stringDate)! } /* * 2016-09-05T19:00:00+0900 -> 午後7:00 */ func getJapaneseTime(jDateString: String?) -> String { let jDate = getNSDate(jDateString!) let jTimeOfDay = ["AM":"午前", "PM":"午後"] self.formatter.dateFormat = "a" let timeOfDay = jTimeOfDay[self.formatter.stringFromDate(jDate)] self.formatter.dateFormat = String(format: "%@h:mm", timeOfDay!) return self.formatter.stringFromDate(jDate) }

我的崩溃日志说明:

self.formatter.dateFormat = String(format: "%@h:mm", timeOfDay!)

1 个答案:

答案 0 :(得分:0)

A:

func getJapaneseTime(jDateString: String?) -> String {
    let jDate = getNSDate(jDateString!)
函数中的

jDateString被认为是非可选的,'只使用它的cos它被强制解包,为什么它在参数中是optional

应该是

func getJapaneseTime(jDateString: String) -> String {
    let jDate = getNSDate(jDateString)

guard letif let之外展开。

B:

let timeOfDay = jTimeOfDay[self.formatter.stringFromDate(jDate)]
self.formatter.dateFormat = String(format: "%@h:mm", timeOfDay!)

如果if let timeOfDay =为零,则应guard let timeOfDay =??或使用timeOfDay指定默认值。

摘要

  

不要在任何地方使用!运营商。更喜欢使用if letguard let??来安全地展开选项。

编辑:此外,我认为上述所有代码都可以使用DateFormatter和日期格式name.txt来实现。