如何在 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 项目的特定目标中使用框架?
无法在框架项目的 Objective-C 代码中导入 Swift 类