无法弄清楚如何使用日期类型和Swift 3中的包装来防止崩溃

时间:2017-03-12 06:09:45

标签: ios swift3 mpmediaitem mpmediaquery

我正在使用MPMediaQuery,特别是播客。在这种特殊情况下,我很难用Optionals和包装/解包。

    titleFilter = MPMediaPropertyPredicate(value: selectedPodcastTitle, forProperty: MPMediaItemPropertyPodcastTitle, comparisonType: .equalTo)
    qryPodcasts.addFilterPredicate(titleFilter)

    for junk in qryPodcasts.items!{

        //works fine
        if let sTitle  = junk.title {
            print("episode title: \(sTitle)")
        }else{
            print("episode title is nil")
        }

        //works fine
        if let dRelease = junk.releaseDate {
            print("episode release date: \(dRelease)")
        }else{
            print("episode release date is nil")
        }
        if #available(iOS 10.0, *) {
            // can't figure out how to make this work
            // crashes on some podcasts and I suspect it's when 'addedDate' is nil
            if let dAdded: Date = junk.dateAdded {
                print("episode added date: \(junk.dateAdded)")
            }else{
                print("episode added date is nil")
            }
        } else {
            print("episode added date is not available")
        }
    }

2 个答案:

答案 0 :(得分:0)

在上次讨论之后,dateAdded具有不可为空的类型Date,并且当它= nil时发生崩溃。

所以我建议你输入Date?,你应该打开它。

 if let dAdded = junk.dateAdded {
 }

或在这种情况下检查nil

 if junk.dateAdded != nil {
 }

答案 1 :(得分:0)

似乎在当前的iOS SDK中错误地注释了declare namespace ms = "http://schemas.openxmlformats.org/spreadsheetml/2006/main" ; declare namespace ns2 = "http://www.example.com/"; declare function local:AgentReport() { <AgentReport> <Report> <GroupNumber>1</GroupNumber> <Quotes>1</Quotes> <Converted>1</Converted> <Conv_Rate>1</Conv_Rate> </Report> <Report> <GroupNumber>2</GroupNumber> <Quotes>2</Quotes> <Converted>2</Converted> <Conv_Rate>2</Conv_Rate> </Report> </AgentReport> }; declare function local:getRows( $x ) as element(ms:row)* { let $first-row := <ms:row> { for $i in $x/*/*[1]/child::element() return <ms:c t="inlineStr"> <ms:is> <ms:t>{fn:node-name($i)}</ms:t> </ms:is> </ms:c> } </ms:row> return ( $first-row, for $each in $x//Report return <ms:row> { for $i in $each/* return <ms:c t="inlineStr"> <ms:is> <ms:t>{$i/string()}</ms:t> </ms:is> </ms:c> } </ms:row> ) }; declare function local:generate-simple-xl-ooxml( $content-types as node(), $workbook as node(), $rels as node(), $workbookrels as node(), $sheet1 as node(), $sheet2 as node() ) as binary() { let $manifest := <parts xmlns="xdmp:zip"> <part>[Content_Types].xml</part> <part>workbook.xml</part> <part>_rels/.rels</part> <part>_rels/workbook.xml.rels</part> <part>sheet1.xml</part> <part>sheet2.xml</part> </parts> let $parts := ($content-types, $workbook, $rels, $workbookrels, $sheet1, $sheet2) return xdmp:zip-create($manifest, $parts) }; let $content-types := <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/> <Default Extension="xml" ContentType="application/xml"/> <Override PartName="/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/> <Override PartName="/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> <Override PartName="/sheet2.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> </Types> let $workbook := <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"> <sheets> <sheet name="Sheet1" sheetId="1" r:id="rId1" /> <sheet name="Sheet2" sheetId="2" r:id="rId2" /> </sheets> </workbook> let $rels := <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="workbook.xml"/> <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="workbook.xml"/> </Relationships> let $workbookrels := <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="sheet1.xml"/> <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="sheet2.xml"/> </Relationships> let $date := xs:string(fn:current-date()) let $day := fn:tokenize($date, "\+")[1] let $xml := local:AgentReport() let $page := xdmp:tidy(xdmp:quote($xml), <options xmlns="xdmp:tidy"> <input-xml>true</input-xml> </options>)[2] let $tables := $page let $sheet1 := <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> {local:getRows($tables)} </sheetData> </worksheet> let $sheet2 := <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> {local:getRows($tables)} </sheetData> </worksheet> let $package := local:generate-simple-xl-ooxml($content-types, $workbook, $rels, $workbookrels, $sheet1, $sheet2) let $filename := "ExcelTest.xlsx" let $disposition := concat("attachment; filename=""",$filename,"""") let $x := xdmp:add-response-header("Content-Disposition", $disposition) let $x := xdmp:set-response-content-type("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") let $insertReport := xdmp:document-insert(concat("/GroupNumberReport/Group-", $day, ".xlsx"), $package, (), "GroupReport") let $saveReport := xdmp:save(concat("C:\EriePoc\DataStage-Demo\Report\Group-", $day, ".xlsx"), $package) return fn:true() 的可空性,您可能需要一些解决方法。

试试此扩展程序:

matchString

并使用它:

var matchTo = $parse(attrs.matchTo);
scope.$watch(function () {
    return matchTo(scope).matchString;
}, function (value) {
    console.log(value);
});

您最好向Apple发送有关此问题的错误报告。 (它可能被归类为重复,但数量可能会影响。)