Initialization “如何修复”;无法使用实例成员';textField_1';在属性初始值设定项内;属性初始值设定项在';自我';有空吗;?
我的编译器没有显示任何问题,但在运行时,我得到一个未知错误。我试图将textField字符串输入放入一个双数组中。不知道怎么了,有人能解释一下我做错了什么吗 我还没有真正尝试过任何东西,但我认为我必须以某种方式使用惰性语法Initialization “如何修复”;无法使用实例成员';textField_1';在属性初始值设定项内;属性初始值设定项在';自我';有空吗;?,initialization,runtime-error,self,swift5,Initialization,Runtime Error,Self,Swift5,我的编译器没有显示任何问题,但在运行时,我得到一个未知错误。我试图将textField字符串输入放入一个双数组中。不知道怎么了,有人能解释一下我做错了什么吗 我还没有真正尝试过任何东西,但我认为我必须以某种方式使用惰性语法 import UIKit class ViewController: UIViewController { // Outlets // textFields @IBOutlet weak var textField_1: UITextField! @IBOutlet w
import UIKit
class ViewController: UIViewController {
// Outlets
// textFields
@IBOutlet weak var textField_1: UITextField!
@IBOutlet weak var textField_2: UITextField!
@IBOutlet weak var textField_3: UITextField!
@IBOutlet weak var textField_4: UITextField!
@IBOutlet weak var textField_5: UITextField!
// labels
@IBOutlet weak var label_1: UILabel!
@IBOutlet weak var label_2: UILabel!
@IBOutlet weak var label_3: UILabel!
@IBOutlet weak var label_4: UILabel!
@IBOutlet weak var label5: UILabel!
// Variables
var input : String = "0";
var a = 0
var age = "9.5"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
var numbers : [Double] = [90, 0, 0, 0, 0]; // where textfields will be converted to double
var userinput : [String?] = [textField_1.text, textField_2.text, textField_3.text, textField_4.text, textField_5.text]!; // textField storage
// Button
@IBAction func button ()
{
// loop inserts userinput into numbers array
while (a < 3) {
numbers.insert(convert_to_double(input1: userinput[a]!) ,at: a)// inserts userinput after
a += 1 // stops loop and changes array index
}
}
// converts strings to double
func convert_to_double(input1: String) -> Double
{
let input0 : Double? = Double(input1);
return input0!
}
}
导入UIKit
类ViewController:UIViewController{
//出口
//文本字段
@IBOUTLE弱变量文本字段\u 1:UITextField!
@IBOUTLE弱var textField_2:UITextField!
@IBOUTLE弱var textField_3:UITextField!
@IBOUTLE弱var textField_4:UITextField!
@IBOUTLE弱变量文本字段_5:UITextField!
//标签
@IBOUTLE弱var标签\u 1:UILabel!
@IBOUTLE弱var标签\u 2:UILabel!
@IBOUTLE弱var标签\u 3:UILabel!
@IBOUTLE弱var标签_4:UILabel!
@IBV弱var标签5:UILabel!
//变数
变量输入:String=“0”;
变量a=0
var age=“9.5”
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
}
变量编号:[Double]=[90,0,0,0,0];//其中textfields将转换为Double
var userinput:[String?]=[textField_1.text,textField_2.text,textField_3.text,textField_4.text,textField_5.text]!//textField存储
//钮扣
@iAction func按钮()
{
//循环将用户输入插入数字数组
while(a<3){
numbers.insert(将\u转换为\u double(input1:userinput[a]!),at:a)//在后面插入userinput
a+=1//停止循环并更改数组索引
}
}
//将字符串转换为双精度
func将双精度转换为双精度(input1:String)->double
{
让输入0:Double?=Double(输入1);
返回输入0!
}
}
:0:错误:无法在属性初始值设定项中使用实例成员“textField_1”;属性初始值设定项在“self”可用之前运行您正在尝试使用索引值访问用户的输入。创建文本输入值数组有两个问题:
self
才可用UITextField
s的最新值使用计算属性: 如果将
userinput
转换为计算属性,则它将始终返回具有最新值的数组:
var userinput : [String?] { return [textField_1.text, textField_2.text, textField_3.text, textField_4.text, textField_5.text] }
缺点是每次访问userinput
都会重新创建这个数组,虽然效率有点低,但它会确保数组包含最新的值。您可以将其分配给按钮顶部的局部变量,以避免在循环中重新创建数组:
@IBAction func button ()
{
let userinput = self.userinput
// loop inserts userinput into numbers array
while (a < 3) {
numbers.insert(convert_to_double(input1: userinput[a]!) ,at: a)// inserts userinput after
a += 1 // stops loop and changes array index
}
}
然后将按钮更改为使用textFields[a].text代码>而不是userinput[a]代码>:
@IBAction func button ()
{
// loop inserts userinput into numbers array
while (a < 3) {
numbers.insert(convert_to_double(input1: textFields[a].text!) ,at: a)// inserts userinput after
a += 1 // stops loop and changes array index
}
}
@IBAction func按钮()
{
//循环将用户输入插入数字数组
while(a<3){
numbers.insert(将\u转换为\u double(input1:textFields[a].text!),at:a)//在
a+=1//停止循环并更改数组索引
}
}
var userinput:[String?]=[textField_1.text,textField_2.text,textField_3.text,textField_4.text,textField_5.text];//textField存储将此代码替换为viewDidLoad()无效。你试过了吗?因为它对我不起作用你的convert\u to\u double(input1:str)
相当于double(str)代码>,因此不会增加太多。你应该避免强行拆开你无法控制的东西。如果用户输入未转换为Double
,则可以使用nil合并运算符提供默认值:例如Double(textFields[a].text!)??0
.convert_to_double(input1:str)像你说的那样没有任何意义,但我要添加更多的代码来检查某些字符是否是类型。我最终使用了双精度(textFields[a].text!)??0 . 谢谢现在我正试着在里面打印双打numbers@Pep3这回答了你的问题吗?如果是,请点击左边的灰色复选标记将其变为绿色来接受。非常感谢!是的,但是如果你有时间,你也可以告诉我如何更新一些标签或只是打印数字,以确保文本字段输入转换为双精度,然后放入数字数组。你可以在代码的关键点添加打印语句,它们将打印到控制台。此外,您还可以设置断点并逐步查看代码的进度。
@IBAction func button ()
{
// loop inserts userinput into numbers array
while (a < 3) {
numbers.insert(convert_to_double(input1: textFields[a].text!) ,at: a)// inserts userinput after
a += 1 // stops loop and changes array index
}
}