在Swift类中使用Dropbox或任何第三方框架

时间:2014-08-12 10:52:37

标签: ios xcode swift dropbox-api

我正在尝试编写一个使用Dropbox Sync API的swift类,但无法快速查看框架。我项目中的目标C可以成功使用Dropbox框架。我有一个桥接标题似乎在项目设置和引用<Dropbox/Dropbox.h>中正确设置。但在我的swift文件中,就好像我什么都没做。

我的项目中的这个目标C代码是有效的,我正在尝试在Swift中复制:

#import <Dropbox/Dropbox.h>

...

if ([DBAccountManager sharedManager].linkedAccount == nil) {
    [[DBAccountManager sharedManager] linkFromController:self];
    [[DBAccountManager sharedManager] addObserver:self block:^(DBAccount *account) {
        DBFilesystem *fileSystem = [[DBFilesystem alloc] initWithAccount:account];
        [DBFilesystem setSharedFilesystem:fileSystem];
    }];

正如我所说,我在Xcode自动为我创建的桥接标题中有<Dropbox/Dropbox.h>。但是,这个快速代码无法编译错误“使用未解析的标识符”DBAccountManager''

import UIKit

class PiecesListTableViewController : UITableViewController {

    override func loadView() {
        super.loadView()

        // This fails with unresolved identifier 'DBAccountManager'
        let accountManager = DBAccountManager.sharedManager

        // As does this
        let accountManagerNew = DBAccountManager(appKey:"", secret:"")
    }
}

有关如何让我的swift代码能够看到Dropbox框架的任何想法吗?

2 个答案:

答案 0 :(得分:0)

我没有设法解决这个问题。相反,我通过将Dropbox框架的所有用法抽象为客观的C类并在我的swift代码中使用它来解决这个问题。

答案 1 :(得分:0)

实际上我找到了这样做的方法:

  1. 创建一个虚拟.m文件,以便XCode要求您创建桥接标头,然后删除.m

  2. 在项目构建设置下,在链接二进制文件库

  3. 下添加 DropboxSDK.framework
  4. 打开bridging-header文件并将其写入#import <DropboxSDK/DropboxSDK.h>

  5. XCode不会编译您的代码,每次打开Swift文件时,SourceKit Service都可能崩溃。

    enter image description here

    这是因为Dropbox SDK中存在两个错误(至少对于Swift环境而言):

    1. Finder 中打开之前链接的 DropboxSDK.framework ,然后导航到Headers文件夹

    2. 打开文件DBQuota.h并在#import <Foundation/Foundation.h>

    3. 之前添加@interface
    4. 打开文件DBSession+iOS.h并在#import <UIKit/UIKit.h>

    5. 之前添加@interface

      现在您可以在Swift文件中使用Dropbox SDK类。

      这将使您免于在每个类上创建Objective-C包装器。