“如果”语句不使用可选值

时间:2015-08-13 16:19:06

标签: swift uitextfield

我的问题是我有一些用户输入数字的文本字段,输入的数字然后保存到相应的变量中。

但是,如果用户没有输入数字并将其留空,则文本字段的值为“nil”,因此如果打开则会崩溃。

因此,如果测试字段的内容不是nil,我只使用if语句解包,但这不起作用。我的程序仍然会解开它并崩溃,因为它的值是nil ...

我不明白我的if语句是如何捕捉到的。

另一方面,如何更改我的if语句,只允许解包和存储Int值,字符串或其他任何内容都将被忽略。

@IBAction func UpdateSettings() {
    if CriticalRaindays.text != nil {
        crit_raindays = CriticalRaindays.text.toInt()!
    }
    if EvapLess.text != nil {
        et_raindays_lessthan_11 = EvapLess.text.toInt()!
    }
    if EvapMore.text != nil {
        et_raindays_morethan_11 = EvapMore.text.toInt()!
    }
    if MaxWaterStorage.text != nil {
        max_h2Ostore = MaxWaterStorage.text.toInt()!
    }
    if CarryForward.text != nil {
        carry_forward = CarryForward.text.toInt()!
    }
}

3 个答案:

答案 0 :(得分:4)

您的问题是,虽然文字存在,但并不意味着void func001() { //stuff } void func002() { //stuff } // ......... void func100() { //stuff } void main(char[][] args) { auto funcnum = to!uint(args[0]); auto funcname = format('func%03d', funcnum); ///// need to run the function named 'funcname' here } 会返回一个值。

说文字为toInt()abc为真,但CriticalRaindays.text != nil仍为CriticalRaindays.text.toInt()!,因为nil无法转换为Int。< / p>

崩溃的确切原因可能是abc等于.text,即空字符串。它不是"",但绝对不是nil

更好的解决方案是使用可选绑定来检查整数转换并查看是否通过,而不仅仅是现有的字符串:

Int

如果没有编译,您可能需要执行可选链接:

if let rainDays = CriticalRaindays.text.toInt() { crit_raindays = rainDays }

不在Mac上,所以无法为您测试,但希望这是有道理的!

答案 1 :(得分:0)

require('../models/Keyword'); var mongoose = require('mongoose'); //ggf. ohne Variable zuzuweisen var Keyword = mongoose.model("Keyword"); function start() { var fs = require('fs'); //XML var jsxml = require("node-jsxml"); var Namespace = jsxml.Namespace, QName = jsxml.QName, XML = jsxml.XML, XMLList = jsxml.XMLList; var EventEmitter=require('events').EventEmitter; var dateinamenEE=new EventEmitter(); var dateinamen = []; var laenge; var pieces; var basiswort; var neuesKeyword; var buf; var xml; var list; var temp; var ergebnis; var buchstabe; var obj; fs.readdir('./data/data10/data/', function (err, files) { if (!err) { files.forEach(function(value) { dateinamen.push(value); }); dateinamenEE.emit('dateinamen_ready'); } else { throw err; } }); dateinamenEE.on('dateinamen_ready',function(){ dateinamen.forEach(function(value) { try { buf = fs.readFileSync('./data/data10/data/'+value, "utf8"); xml = new XML(buf); list = xml.descendants("suggestion"); temp = ""; ergebnis = ""; buchstabe = ""; obj = null; list.each(function(item, index){ ergebnis = item.attribute('data').toString() temp = decodeURIComponent(value); temp = temp.replace(".xml", ""); pieces = temp.split("+"); basiswort = ""; laenge = pieces.length-1 buchstabe = pieces[laenge] for(var i = 0; i < laenge; i++) { basiswort = basiswort +" "+ pieces[i]; } basiswort = basiswort.replace (/^\s+/, '').replace (/\s+$/, ''); uniqueKey = basiswort+buchstabe+ergebnis; uniqueKey = uniqueKey.replace(/\s/g, ""); obj = {_id: uniqueKey, basis: basiswort, buchstabe: buchstabe, ergebnis: ergebnis}; neuesKeyword = new Keyword(obj); neuesKeyword.save(); }); } catch (e) { console.log(e.stack); } }); }); } 中,设置ViewDidLoad这样就永远不会为零

编辑:

要检查文本字段是否为空,您可以使用:

CarryForward.text = ""

答案 2 :(得分:0)

如果文本字段的文字是非零的,为什么不使用if let来解开?

if let textString = self.textField.text as String! {
    // do something with textString, we know it contains a value
}