2016-07-11 24 views
0

我正在尝试构建一个IOS应用程序,该应用程序允许我将学校主题输入到一系列文本框中。所有输入的主题将进入阵列;其中我会做一个字符串。然后,我将使用该字符串创建一个包含主题列表的QR码(无论如何,这就是计划!)。使用从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) 

} 

我的目标是再能扫描QR码和将以前输入的每个主题放入各自的标签中......这就是我卡住的地方!

是否可以读取QR码中的数据,然后使用特定的部件?即如果我已经说“Subject One”为“Maths”,那么我可以确保一旦阅读QR码后,“Maths”会进入我的“Subject One”标签?基本上可以在QR码内查找特定数据吗?

道歉,如果我不是很清楚,这是一个相当困难的解释!

回答

0

绝对!你需要做的是指定一种“协议”(不是迅速的,而是一组“规则”)。

您现在所做的只是将这些值合并为一个字符串,并用空格分隔。这带有一定的局限性:

  • 如果你想引入一个新的领域,你必须把它添加到字符串的结尾(否则你就必须改变你的实现占较大部分新值+所有旧QR码将停止工作)。
  • 如果一个或多个字段为空,则会在字符串中间留下两个空格。根据你的解析器,这可能会导致错误的值错误的地方。
  • 解析它时,您依赖于按某种顺序进入的值。

我反而建议你从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 
}) 

的例子将返回就像一本字典:["subjectTwo": "music", "subjectOne": "maths", "fall": ""]

该解决方案更加安全。只需执行moduleOne.text = dict["subjectTwo"]或其他操作即可在扫描时填充您的用户界面。

+0

谢谢您的回复!我想我明白你的意思,(我需要对字典进行更多的研究!)所以当我最终扫描生成的QR码时,我只需要寻找“subjectTwo”,并处理这些数据呢? – evorg88

+0

多数民众赞成的想法,是的;) – Mattias

+0

非常好,非常感谢你! – evorg88