Swift 2.2:函数中的可选绑定

时间:2016-05-17 15:29:08

标签: swift binding optional

嘿伙计们,

我很喜欢编程,所以我跟着Udemy教我Swift 2.2。

出于学习目的,我一直在尝试编程BMI计算器,其中我有一个文本字段(只显示值)和一个滑块,我可以将我的体重以千克为单位。拖动滑块后,该值在文本字段中可见。我无法在文本字段中放置一个值,以便它显示在滑块上!

使用相同的文本字段 - 滑块关系,高度以cm为单位。现在我创建了一个IBAction,将我的kgSlider.value带到我的kgField.text中,它看起来像这样:

@IBAction func kgSet(sender: AnyObject) {

    kgField.text! = String(Int(kgSlider.value))
}

多数民众赞成工作正常,但我不知道,如果真的有价值,我就打开了(就像课程中的老师一样)。好的,我知道在这种情况下会有一个值,但我想更真实,因此我尝试使用Optional-Binding来查找,如果有值而不是直接打开它。

因此我在我的代码中使用了cm.Field和cm.Slider,但它现在还没有用,我也不知道为什么。代码如下:

@IBAction func cmSet(sender: AnyObject) {

    if let tempCm = String(Int(cmSlider.value)) as String!  {

        cmField.text = tempCm

    }
}

所以我创建了一个名为tempCM的常量,如果有值,它将从cmSlider获取值。因此,我将cmSlider.value像其他IBAction一样转换为Int,然后转换为String。如果有值,它将把它携带到cmField.text中。这没有用,因此我尝试使用" as String!"声明,但我知道我总是0而不是正确的值。

那我在那里做错了什么?

1 个答案:

答案 0 :(得分:1)

所以,这应该编译好并为您提供所需的结果。

@IBAction func cmSet(sender: AnyObject) {

    if let tempCm = String(Int(cmSlider.value))  {

        cmField.text = tempCm

    }
}

你也可以试试这个

cmField.text = String(Int(cmSlider.value)) ?? " "

在第二个示例中,您使用可选运算符来说明是否可以将其转换为Int,然后将Int转换为字符串将cmField.text属性设置为其值,否则使用空格作为默认值。