0

我正在使用 swift 2 创建一个 iphone 应用程序。我让该应用程序能够读取条形码并显示条形码。我还学习了核心数据,并使用它来导入一个 .csv 文件,其中包含一堆产品信息,其中包括条形码。现在,当扫描条形码时,我希望它搜索文件并显示与之相关的信息。这是我的部分代码,我将如何去做?老实说,我现在和过去两天都有程序员阻塞。任何帮助或指导将不胜感激。

这是 CSV 解析器:

func parseCSV (contentsOfURL: NSURL, encoding: NSStringEncoding) -> [(title:String, price:String, weight:String, box_length:String, box_width:String, box_height:String, sku:String, barcodeNum:String )]? {

        // Load the CSV file and parse it
        let delimiter = ","
        var items:[(title:String, price:String, weight:String, box_length:String, box_width:String, box_height:String, sku:String, barcodeNum:String )]?

        do {
            let content = try String(contentsOfURL: contentsOfURL, encoding: encoding)
            print(content)
            items = []
            let lines:[String] = content.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) as [String]

            for line in lines {
                var values:[String] = []
                if line != "" {
                    // For a line with double quotes
                    // we use NSScanner to perform the parsing
                    if line.rangeOfString("\"") != nil {
                        var textToScan:String = line
                        var value:NSString?
                        var textScanner:NSScanner = NSScanner(string: textToScan)
                        while textScanner.string != "" {

                            if (textScanner.string as NSString).substringToIndex(1) == "\"" {
                                textScanner.scanLocation += 1
                                textScanner.scanUpToString("\"", intoString: &value)
                                textScanner.scanLocation += 1
                            } else {
                                textScanner.scanUpToString(delimiter, intoString: &value)
                            }

                            // Store the value into the values array
                            values.append(value as! String)

                            // Retrieve the unscanned remainder of the string
                            if textScanner.scanLocation < textScanner.string.characters.count {
                                textToScan = (textScanner.string as NSString).substringFromIndex(textScanner.scanLocation + 1)
                            } else {
                                textToScan = ""
                            }
                            textScanner = NSScanner(string: textToScan)
                        }

                        // For a line without double quotes, we can simply separate the string
                        // by using the delimiter (e.g. comma)
                    } else  {
                        values = line.componentsSeparatedByString(delimiter)
                    }

                    // Put the values into the tuple and add it to the items array
                    //(title:String, price:String, weight:String, box_length:String, box_width:String, box_height:String, sku:String, barcodeNum:String )
                    let item = (title: values[0], sku: values[1], price: values[2], weight: values[3], box_length: values[4], box_width: values[5], box_height: values[6], barcodeNum: values[7])
                    items?.append(item)
                }
            }

        } catch {
            print(error)
        }

        return items
    }

当检测到条形码时:

 func barcodeDetected(code: String) {
        print(code)
        if(barcodeDelegate != nil){
            barcodeDelegate!.barcodeFound(code)
        }

        // Let the user know we've found something.

        let alert = UIAlertController(title: "Found a Barcode!", message: code, preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "Search", style: UIAlertActionStyle.Destructive, handler: { action in

            // Remove the spaces.

            let trimmedCode = code.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

            // EAN or UPC?
            // Check for added "0" at beginning of code.

            let trimmedCodeString = "\(trimmedCode)"
            var trimmedCodeNoZero: String

            if trimmedCodeString.hasPrefix("0") && trimmedCodeString.characters.count > 1 {
                trimmedCodeNoZero = String(trimmedCodeString.characters.dropFirst())

                // Send the doctored UPC to DataService.searchAPI()

                DataService.searchCode(trimmedCodeNoZero)
            } else {

                // Send the doctored EAN to DataService.searchAPI()

                DataService.searchCode(trimmedCodeString)
            }

            self.navigationController?.popViewControllerAnimated(true)
        }))

        self.presentViewController(alert, animated: true, completion: nil)
}

数据服务.swift 文件

import Foundation

class DataService {

    static let dataService = DataService()

    static func searchCode(codeNumber: String) {

    }


}

如果有帮助的话,我可以发布更多我的项目,但我觉得这已经是太多的信息了,在这一点上,任何事情都会对如何解决这个问题有所帮助。

4

0 回答 0