使用添加赋值运算符时自动解包变量

时间:2015-12-20 09:59:55

标签: swift

在Swift中,您有Optionals数据类型的概念,当您想要使用它们时必须解开它:

<f:view>
        <h:form>
            <h:dataTable value="#{bookController.books}" var="item" class="table">
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Isbn"/>
                    </f:facet>
                    <h:link value="#{item.isbn}" outcome="#{bookController.getLibraryBook(item.isbn)}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Title"/>
                    </f:facet>
                    <h:outputText value="#{item.title}"/>
                </h:column>
                <h:column>
                    <h:commandButton value='Update' class="btn btn-warning" action="#{bookController.EditBook(item)}"></h:commandButton>
                    <h:commandButton value='Delete' class="btn btn-danger" action="#{bookController.deleteBook(item.isbn)}"></h:commandButton>
                </h:column>
            </h:dataTable>
        </h:form>
    </f:view>

这很好,但是如果你想使用更简洁的加法赋值运算符(+ =),它似乎很快变得不可能:

var myVar: String? = "Hello"
myVar = myVar! + " world!"

当然这会引发错误,因为你不能简单地添加一个字符串?和一个字符串。那么在使用这个操作符时有什么东西可以打开一个可选值,或者swift会让你用更长的时间写出来吗?

(我想象一个完美的世界,语法看起来像是:

myVar += " world!"

修改 在这个例子中,可选变量是由使用它的人声明的,当然在现实世界中,你可以拥有变量,而这些变量你不具有简单地声明不同的奢侈品。你可以放心地假设这个问题不是关于你可能选择不使用选项的任何情况,这个问题是关于使用选项。

1 个答案:

答案 0 :(得分:2)

这个怎么样?

empty

修改

除此之外,我建议尽量使用非可选类型 只需 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#DEDEDC" android:layout_width="match_parent" android:layout_height="fill_parent" android:minWidth="300dp" android:minHeight="400dp"> <Button android:text="Button" android:padding="6dip" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/img04" android:id="@+id/dragObj" android:layout_marginRight="0.0dp" /> </LinearLayout> 类型可以使用空字符串轻松初始化,也可以使用using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; namespace LearnMaths { [Activity (Label = "CountUpDown")] public class CountUpDown : Activity, View.IOnTouchListener { private Button dragObj; private float _viewX; protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); SetContentView (Resource.Layout.CountUpDown); dragObj = FindViewById<Button> (Resource.Id.dragObj); dragObj.SetOnTouchListener (this ); // Create your application here } public bool onTouch(View v, MotionEvent e){ switch (e.Action) { case MotionEventActions.Down: _viewX= e.GetX (); break; case MotionEventActions.Move: var left = (int)(e.RawX - _viewX); var right = (int)(left + v.Width); v.Layout (left, v.Top, right, v.Bottom); break; } return true; } } } enter code here 属性进行检查。这完全避免了可选的舞蹈麻烦。