处理从二维码读取的数据
Working with data read from a QR code
我正在尝试构建一个 IOS 应用程序,让我可以将学校科目输入到一系列文本框中。所有输入的主题都会进入数组;我将从中制作一个字符串。然后,我将使用该字符串创建一个包含主题列表的 QR 码...(无论如何,这就是计划!)。
这是我目前用来创建字符串的代码,我将用它来创建 QR 码:
//奥特莱斯
@IBOutlet var moduleOne: UITextField!
@IBOutlet var moduleTwo: UITextField!
@IBOutlet var moduleThree: UITextField!
@IBOutlet var moduleFour: UITextField!
//Actions
@IBAction func goButton(sender: AnyObject) {
let subjectOne = moduleOne.text!
let subjectTwo = moduleTwo.text!
let subjectThree = moduleThree.text!
let subjectFour = moduleFour.text!
let newArray: [String] = ["\(subjectOne)", "\(subjectTwo)", " (subjectThree)", "\(subjectFour)"]
let arrayString = newArray.joinWithSeparator(" ")
//print(arrayString)
}
我的目标是然后能够扫描二维码并将之前输入的每个主题放入各自的标签中......这就是我被困的地方!
是否可以从二维码中读取数据,然后处理特定的部分?即,如果我将 "Subject One" 声明为 "Maths",那么我能否确保 "Maths" 在我阅读二维码后进入我的 "Subject One" 标签?基本上可以在二维码中查找特定数据吗?
抱歉,如果我不是很清楚,这很难解释!
当然!您要做的是指定一种 "protocol"(不是 swift protocol
而是一组 "rules")。
您现在所做的只是将这些值组合成一个字符串,用 space 分隔。这有一些限制:
- 如果你想引入一个新的字段,你必须将它附加到字符串的末尾(否则你将不得不更改你的实现的大部分以解释新值 + 所有旧值QR 码将停止工作)。
- 如果一个或多个字段为空,您将在字符串中间留下两个 space。根据您的解析器,这可能会导致值以错误的方式偏移的错误。
- 解析时,您依赖于按特定顺序出现的值。
我建议您改为从 URL 中获取一些灵感。考虑以下示例:
let qrInput = "subjectOne=maths&subjectTwo=music&fall="
let parsed: [String:String] = qrInput.componentsSeparatedByString("&").reduce([:], combine: { (dict, keyValue) in
var dict = dict
let components = keyValue.componentsSeparatedByString("=")
if components.count > 1 {
dict[components[0]] = components[1]
}
return dict
})
该示例将 return 像这样的字典:["subjectTwo": "music", "subjectOne": "maths", "fall": ""]
这个解决方案更安全。只需执行 moduleOne.text = dict["subjectTwo"]
或其他操作即可在扫描时填充您的 UI。
我正在尝试构建一个 IOS 应用程序,让我可以将学校科目输入到一系列文本框中。所有输入的主题都会进入数组;我将从中制作一个字符串。然后,我将使用该字符串创建一个包含主题列表的 QR 码...(无论如何,这就是计划!)。
这是我目前用来创建字符串的代码,我将用它来创建 QR 码: //奥特莱斯
@IBOutlet var moduleOne: UITextField!
@IBOutlet var moduleTwo: UITextField!
@IBOutlet var moduleThree: UITextField!
@IBOutlet var moduleFour: UITextField!
//Actions
@IBAction func goButton(sender: AnyObject) {
let subjectOne = moduleOne.text!
let subjectTwo = moduleTwo.text!
let subjectThree = moduleThree.text!
let subjectFour = moduleFour.text!
let newArray: [String] = ["\(subjectOne)", "\(subjectTwo)", " (subjectThree)", "\(subjectFour)"]
let arrayString = newArray.joinWithSeparator(" ")
//print(arrayString)
}
我的目标是然后能够扫描二维码并将之前输入的每个主题放入各自的标签中......这就是我被困的地方!
是否可以从二维码中读取数据,然后处理特定的部分?即,如果我将 "Subject One" 声明为 "Maths",那么我能否确保 "Maths" 在我阅读二维码后进入我的 "Subject One" 标签?基本上可以在二维码中查找特定数据吗?
抱歉,如果我不是很清楚,这很难解释!
当然!您要做的是指定一种 "protocol"(不是 swift protocol
而是一组 "rules")。
您现在所做的只是将这些值组合成一个字符串,用 space 分隔。这有一些限制:
- 如果你想引入一个新的字段,你必须将它附加到字符串的末尾(否则你将不得不更改你的实现的大部分以解释新值 + 所有旧值QR 码将停止工作)。
- 如果一个或多个字段为空,您将在字符串中间留下两个 space。根据您的解析器,这可能会导致值以错误的方式偏移的错误。
- 解析时,您依赖于按特定顺序出现的值。
我建议您改为从 URL 中获取一些灵感。考虑以下示例:
let qrInput = "subjectOne=maths&subjectTwo=music&fall="
let parsed: [String:String] = qrInput.componentsSeparatedByString("&").reduce([:], combine: { (dict, keyValue) in
var dict = dict
let components = keyValue.componentsSeparatedByString("=")
if components.count > 1 {
dict[components[0]] = components[1]
}
return dict
})
该示例将 return 像这样的字典:["subjectTwo": "music", "subjectOne": "maths", "fall": ""]
这个解决方案更安全。只需执行 moduleOne.text = dict["subjectTwo"]
或其他操作即可在扫描时填充您的 UI。