我的问题是我有一些用户输入数字的文本字段,输入的数字然后保存到相应的变量中。
但是,如果用户没有输入数字并将其留空,则文本字段的值为“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()!
}
}
答案 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
}