如何在 Swift 项目中导入 Zbar 框架

Posted

技术标签:

【中文标题】如何在 Swift 项目中导入 Zbar 框架【英文标题】:How to import Zbar Framework in Swift Project 【发布时间】:2014-10-01 10:00:02 【问题描述】:

我有一个项目,目前正在尝试转换为 Swift 项目,但我不知道如何展示一个从相机源扫描的 Zbar 条形码阅读器。 在我目前的项目中,我是这样称呼的

- (IBAction)scanButton:(id)sender 

    // ADD: present a barcode reader that scans from the camera feed
    ZBarReaderViewController *reader = [ZBarReaderViewController new];
    reader.readerDelegate = self;
    reader.supportedOrientationsMask = ZBarOrientationMaskAll;

    ZBarImageScanner *scanner = reader.scanner;
    // TODO: (optional) additional reader configuration here

    // EXAMPLE: disable rarely used I2/5 to improve performance
    [scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];

    // present and release the controller
    [self presentViewController:reader animated:YES completion:nil];

注意: 到目前为止我做了什么

    将框架复制到 swift 中

    在标题搜索路径中添加了框架路径(目标部分 > 构建设置)

    $(PROJECT_DIR)/Test/ZBarSDK/Headers/ZBarSDK 为桥接创建了 Projectname-Bridging-Header.h(添加了 zbar 中的所有 h 文件) 在标题搜索路径中添加了 Projectname-Bridging-Header.h

之后,如果我写“import ZBarSDK”或 ZBarReaderDelegate 仍然给我错误!

【问题讨论】:

这篇文章解决了我的问题 (GIF) ***.com/a/24005242/4059179 谁会尝试添加 Zbar SDK 也可能会面临 NSEnumeration 问题。所以对于这个函数使用以下 .... func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) var results: NSFastEnumeration = info[ZBarReaderControllerResults] as NSFastEnumeration 希望这对某人有所帮助!别忘了延长!!扩展 ZBarSymbolSet: SequenceType public func generate() -> NSFastGenerator return NSFastGenerator(self) 我也遇到了同样的问题 看看这个:github.com/aeieli/swiftQRCode 需要改几个很简单的语法错误,不然完全可以在ios 8.1上运行 【参考方案1】:

对于 Swift 3:

extension ZBarSymbolSet: Sequence 
    public func makeIterator() -> NSFastEnumerationIterator 
        return NSFastEnumerationIterator(self)
    


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
        // ADD: get the decode results
        let results: NSFastEnumeration = info[ZBarReaderControllerResults] as! NSFastEnumeration

        var symbolFound : ZBarSymbol?

        for symbol in results as! ZBarSymbolSet 
            symbolFound = symbol as? ZBarSymbol
            break
        
        let resultString = symbolFound!.data
        print(resultString)
    

【讨论】:

【参考方案2】:

解决办法

以下链接帮助了我 https://***.com/a/24005242/4059179

但在那之后我遇到了 NSEnumeration 问题,所以这里是第二个问题的解决方案

func imagePickerController(picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [NSObject : AnyObject])
var results: NSFastEnumeration = info[ZBarReaderControllerResults] as NSFastEnumeration
 

别忘了扩展

extension ZBarSymbolSet: SequenceType  public func generate() -> NSFastGenerator  return NSFastGenerator(self)  

【讨论】:

【参考方案3】:

我有这个project

使用 cocoapods 将 ZBarSDK 导入 Swift 2.0 项目。

【讨论】:

以上是关于如何在 Swift 项目中导入 Zbar 框架的主要内容,如果未能解决你的问题,请参考以下文章

考虑到需要在某些类中导入框架,如何在 iOS 项目的特定目标中使用框架?

在 Swift 框架中导入 CommonCrypto

无法在框架项目的 Objective-C 代码中导入 Swift 类

如何在 Swift 的 JavaScriptCore 中导入模块?

如何在 Playground 中导入 Swift 包?

如何在swift中导入Objective c文件