Swift如何打印可选字符串

时间:2018-10-17 11:55:11

标签: ios swift optional

也许是一个非常基本的问题,但基本上没有很多额外的代码就找不到一个好的答案:

var item: String?
print(item) //works as expected
print("Item: "+item) //compile error

我想以某种方式实现第二种形式而没有额外的变量或表达式/代码吗?

3 个答案:

答案 0 :(得分:1)

您可以这样做

print("Item: \(item)")

快速编写它的方法是这样的。

并且您可以确定其中的现有值,因此可以是

print("Item: \(item!)")

如果在其他情况下,如果不确定该值是否存在,则可以使用if let

if let item = item {
    print("Item: \(item)")
}

希望有帮助

答案 1 :(得分:0)

尝试以下行

<html xmlns="http://www.w3.org/1999/html">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
    <title>Free Css Layout</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="styles.css" />
    <?php
    include 'header.php';
    include 'aside.php';
?>
</head>
<body>
<div id="container">
    <div id="header"><h1><?php echo $logo;?></h1></div>
    <div id="wrapper">
        <div id="aside">
                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
                    Duis venenatis, ante vulputate placerat luctus, odio risus feugiat magna, eu pretium sem lorem in ipsum.</p>
           <?php
           $output="";
           foreach ($json['aside'] as $aside)
           {
               $output.="".$aside['web']."<br />";
           }
           echo "<a href='$output'></a>";
           ?>



        </div>
    </div>
        <div id="content">
            <p><strong>Content here.</strong></p>
            <p>Sapibulumnibh phasellus nulla egestibulum enim pretium elit tincidunt estiquam ultrisque donectetur. Sedcondimentumsan odio hendrerit proin vitae dignis nibh ac justo id congue. Amesintesque vel curabitae volutpat donec alique nasceleifendimentesque montesque rhoncus quis eros. Vestnunc nonummy</p>
            <p>Montegeraliquam sed pede in cursus praesenec vestas rhoncus wisi at wisi. Condisseloborttis enim et ipsum mauristie id felit adipiscipit ac auctortorttitor sempor. Vitantesqueat sempus non sed et mus sit vivamus purus netus hendiment. Pretiuma diam et id tempus dolor por wisi sed volutpat facilisi.</p>
            <p>Wisiet sus adipit phasellentum elit condissim consecteturpiscing sapien vivamus et congue. Utvel tris quismod cursus liberos elit nisse curabitur tur parturpis tellenterdum. Semperligula curabitae tellentesque nulla trices vestas ristibulum id justo auctor facinia. Natisdonec consequat nibh pellus.</p>
            <p>Vestibusodio euisque id elerisus lacus tincidunt sit malesuada lacus pellus parturpiscing. Pellenterdumat maecenatoque cras a magna nibh et quis diam ames et. Laoremvolutpat ac dolor eget eget temper lacus vestibus velit lacus venean. Magnaipsum tellus morbi leo aliquat nulla convallis pellentesque.</p>
        </div>
    <div id="footer">
        <p>Footer</p>
    </div>
</div>
</body>
</html>

if let item = item {
    print(String.init(format: "Item: %@", item))
}

答案 2 :(得分:0)

我建议使用string interpolation

您有4个选项可用于实际展开可选内容:

  1. 检查nil。您可以确保您的可选选项不是非{nil,如果是,则将其强制展开。

    if optional != nil {
        print(optional!)
    }
    
  2. if-letguard-let(可选绑定)。这将检查可选参数是否为非{nil,如果是,则在if语句中提供未包装的可选参数。

    if let nonOptional = optional {
        print(nonOptional)
    }
    
  3. 强制展开。如果您的可选参数不是nil,则此操作正常,但如果可选参数是nil,则崩溃。因此,不建议使用此方法。

    print(optional!)
    
  4. 默认值。如果您的变量的值不是nil,则使用此方法的值;如果变量是nil,则使用提供的默认值

    print(optional ?? "Optional was nil!")
    

对于您的特定情况,我会这样做:

print("Item: \(item ?? "Item was nil!")")

或者这个:

if let item = item {
    print("Item: \(item)")
} else {
    print("Item was nil!")
}

请记住,如果elseitem时不想打印,则不需要nil子句。

希望这会有所帮助!