ZXingObjc - Converting object c to swift

ε祈祈猫儿з 提交于 2019-12-30 07:09:05

问题


I'm a newbie with Ios. i'm learning swift and overlooked object c.

Currently, i'm writing an demo with swift and xcode 6.1 which can scan qrcode and barcode from camera or an image from image library.

before, i tried using zbar SDK to do this, but it happened error and i didn't know how to fix it, i posted this error in post: Scan qrcode and barcode from camera and image which picked from image library in swift , but nobody answered.

i'm trying using ZXingObjC to scan qrcode and barcode from image and camera https://github.com/TheLevelUp/ZXingObjC , i read its usage and tried to convert to swift. but it happened error and i don't know how to fix it.

Here is my code:

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var lblResult: UILabel!
    @IBOutlet weak var imgView: UIImageView!
    var imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()
        imagePicker.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func scanCode(sender: AnyObject) {
        imagePicker.sourceType = .PhotoLibrary
        imagePicker.allowsEditing = false
        presentViewController(imagePicker, animated: true, completion: nil)
    }

    func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: NSDictionary!) {
        var tempImage:UIImage = info[UIImagePickerControllerOriginalImage] as UIImage
        imgView.contentMode = .ScaleAspectFit
        imgView.image  = tempImage
        dismissViewControllerAnimated(true, completion: nil)

        //====> object c code <=====
        /*
        ZXLuminanceSource *source = [[[ZXCGImageLuminanceSource alloc] initWithCGImage:imageToDecode] autorelease];
        ZXBinaryBitmap *bitmap = [ZXBinaryBitmap binaryBitmapWithBinarizer:[ZXHybridBinarizer binarizerWithSource:source]];

        NSError *error = nil;
        ZXDecodeHints *hints = [ZXDecodeHints hints];
        ZXMultiFormatReader *reader = [ZXMultiFormatReader reader];
        ZXResult *result = [reader decode:bitmap
            hints:hints
            error:&error];
        if (result) {
        }
        */

        //====> Convert to swift and happen error <=====
        let source: ZXLuminanceSource = ZXCGImageLuminanceSource(initWithCGImage: tempImage)
        let binazer: ZXHybridBinarizer = ZXHybridBinarizer(source: source)
        let bitmap: ZXBinaryBitmap = ZXBinaryBitmap(binarizer: binazer)

        var error: NSError?

        var hints: ZXDecodeHints = ZXDecodeHints()
        var reader: ZXMultiFormatReader = ZXMultiFormatReader()
        var result: ZXResult = reader(bitmap, hints:hints, error: error)
        if (result) {
            lblResult.text = result.text;
        }
    }

}

I will be very grateful if someone let me know why it happen error and how to fix it (please give detail instructions because i have just learned swift and ios for 3 weeks without learning object c). Thanks.

Edited: This code worked for me.

let source: ZXLuminanceSource = ZXCGImageLuminanceSource(CGImage: tempImage.CGImage)
let binazer = ZXHybridBinarizer(source: source)
let bitmap = ZXBinaryBitmap(binarizer: binazer)
var error: NSError?
let hints: ZXDecodeHints = ZXDecodeHints.hints() as ZXDecodeHints
var reader = ZXMultiFormatReader()

if let result = reader.decode(bitmap, hints: hints, error: &error) {
  lblResult.text = result.text;
}

回答1:


You're almost there — this should get you the rest of the way. Note the comments:

// initializers are imported without "initWith"
let source: ZXLuminanceSource = ZXCGImageLuminanceSource(CGImage: tempImage)
let binazer = ZXHybridBinarizer(source: source)
let bitmap = ZXBinaryBitmap(binarizer: binazer)

var error: NSError?

var hints = ZXDecodeHints()
var reader = ZXMultiFormatReader()
// 1) you missed the name of the method, "decode", and
// 2) use optional binding to make sure you get a value
if let result = reader.decode(bitmap, hints:hints, error: error) {
    lblResult.text = result.text;
}


来源:https://stackoverflow.com/questions/28402422/zxingobjc-converting-object-c-to-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!