ZXingObjc - 将对象c转换为swift [英] ZXingObjc - Converting object c to swift

查看:286
本文介绍了ZXingObjc - 将对象c转换为swift的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Ios的新手。我正在学习快速且被忽视的对象c。

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

目前,我正在编写一个带有swift和xcode 6.1的演示,它可以扫描来自摄像机的qrcode和条形码或者来自图像库。

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.

之前,我尝试使用zbar SDK来做到这一点,但它发生错误,我不知道如何解决它,我在帖子中发布此错误:扫描qrcode和从快照中从图像库中挑选的相机和图像条码,但没有人回答。

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.

我正在尝试使用ZXingObjC扫描图像中的qrcode和条形码相机 https://github.com/TheLevelUp/ZXingObjC ,我读了它的用法并尝试转换为迅速。但它发生了错误,我不知道如何解决它。

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.

这是我的代码:

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;
        }
    }

}

我会非常感激,如果有人让我知道为什么会发生错误以及如何解决它(请详细说明,因为我刚刚学习了swift和ios 3周而没有学习对象c)。谢谢。

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;
}


推荐答案

你几乎就在那里 - 这应该可以让你完成其余的工作。请注意注释:

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;
}

这篇关于ZXingObjc - 将对象c转换为swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆