swift - XCode/Swfit:如何切换视图控制器之间传递的变量作为字典的名称?
问题描述
我在 XCode 12/Swift 5 中使用以下代码来尝试执行以下操作:
接收一个从一个视图控制器传递给这个视图控制器的变量(passedVerb,这有效)
根据传递的“passedVerb”变量在字典中查找项目。这将根据用户在主视图控制器中使用的动词而改变,因此我需要它能够将其切换出去。
当我在操场上运行以下代码时,它运行良好
import UIKit var yekol = [0: "yekol", 1: "bekol", 2: "btekol"] var youm = [0: "youm", 1: "boum", 2: "btoum"] var yekol2 = ["inf": "yekol", "ana": "bekol", "enta": "btekol"] var verbs = [yekol, youm] var randVerb = verbs.randomElement() //depending on which random verb is chosen, look up in the right dictionary above var anaForm = randVerb![1]! var entaForm = randVerb![2]! print(anaForm as Any) print(entaForm as Any)
但是当我尝试在我的主项目的视图控制器中执行此操作时,我无法像使用“randVerb”在正确的字典中查找一样使用“passedVerb”:
import UIKit
class AboutViewController: UIViewController {
//variables
var anaForm = ""
var entaForm = ""
var nehnaForm = ""
//a variable to hold the data from the first ViewController
var passedVerb = ""
let yekol = [0: "yekol",
1: "bekol",
2: "btekol",
3: "mnekol"]
let edros = [0: "edros",
1: "bedros",
2: "btedros",
3: "mnedros"]
func updateTable() {
//below works, but only because I'm explicitly calling the right dictionary
var anaForm = yekol[1]
//neither of the below forms work in the same way as in playground. i get a 'subscript(_:)' is unavailable: cannot subscript String with an Int, use a String.Index instead. i can't for the life of me figure out how to fix this despite the warning
var entaForm = passedVerb![2]!
var nehnaForm = passedVerb[3]
anaLabel.text = anaForm
entaLabel.text = entaForm
nehnaLabel.text = nehnaForm
}
}
@IBOutlet weak var currentVerb: UILabel!
@IBOutlet weak var anaLabel: UILabel!
@IBOutlet weak var entaLabel: UILabel!
@IBOutlet weak var nehnaLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
currentVerb.text = passedVerb
updateTable()
}
}
任何见解或帮助将不胜感激。我一直在学习 Xcode/Swift 作为我的第一门编码语言,所以希望这不是(也许是?)太明显的问题。
提前致谢!
解决方案
如果您需要帮助将包含多个动词形式的字典从一个视图控制器传递到下一个视图控制器,您需要发布将动词传递给另一个视图控制器的当前代码。
你在使用 segueprepare(for:sender:)
吗?添加调用第二个视图控制器并传递动词的代码。
我注意到的一件事:在AboutViewController
您声明passedVerb
为 empty String
。但是,在您的 Playground 代码中,您的动词属于类型(包含键和值[Int:String]
的字典。Int
String
您应该将声明更改passedVerb
为:
var passedVerb = [Int:String]()
编辑:
这就是为什么你得到你得到的错误:
subscript(_:)' 不可用:不能用 Int 为 String 下标,请改用 String.Index。
您将您声明passedVerb
为字符串,然后尝试将其作为字典进行索引。
您还应该停止使用!
强制展开运算符。如果字典不包含指定的键,这些将使您的代码崩溃。
推荐阅读
- java - 此版本的 sql server 不支持对数据库和/或服务器名称的引用
- java - Spring Security:授权服务器:访问被拒绝(用户是匿名的);重定向到身份验证入口点
- python-3.x - 如何在python中使用loc选择和显示多列
- javascript - DataTable dd-mm-yyyy 格式未正确显示升序
- javascript - ReactJS 中的条件电话掩码数字作为 if 语句或函数
- java - 刷新表格视图时丢失组合框数据
- node.js - 生成器权限被拒绝。无法在谷歌云上部署
- jquery - 完成后删除动画名称
- quartus - Quartus 18 IP 错误
- javascript - 从 ajax 数据设置应用程序