我一直在尝试检查CocoaPods的新框架设置,以便让一些Pod继续运行,而我在使用Objective-C项目中的Swift问题时遇到了麻烦。
首先,这是CocoaPods预发布0.35,您可以阅读有关如何使用和安装here的信息。
这是我当前的Podfile:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'MBProgressHUD'
pod 'SLPagingViewSwift'
MBProgressHUD是一个常见的旋转指示器,SLPagingViewSwift是一个随机项目,我通过在Cocoapods搜索中输入Swift找到。这是我的项目中的ViewController.m
:
#import "ViewController.h"
@import SLPagingViewSwift;
@import MBProgressHUD;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Works just fine
MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:hud];
[hud show:YES];
// Causes Error -- Won't build
SLPagingViewSwift *sl = [[SLPagingViewSwift alloc] init];
}
@end
这是SLPagingViewSwift
声明:
class SLPagingViewSwift: UIViewController, UIScrollViewDelegate {
正如您所看到的,它继承自UIViewController
,因此分配它并初始化它不应该是一个问题。如果我将文件单独添加为文件,上面的代码运行就好了。我知道它有效。
tl; dr
如何在纯Objective-C类中使用CocoaPods创建的纯Swift框架?
疑难解答
我一直在尝试各种进口。 Apple推荐使用@import
样式here
但我一直在尝试其他多种品种:
// Compiler Error
#import <SLPagingViewSwift/SLPagingViewSwift.h>
// Builds Fine -- Doesn't Work
#import <SLPagingViewSwift/SLPagingViewSwift-Swift.h>
#import "SLPagingViewSwift-Swift.h"
我也不时尝试其他一些Swift库,看看我是否可以点击任何内容。
我在Cocoapods问题上没有看到任何有助于此的问题,我也没有在他们的博客/发布内容中找到任何内容。
注意
如果我以旧式方式将SLPagingViewSwift.swift
文件单独添加到项目中,它就可以正常工作。
答案 0 :(得分:40)
我认为你必须将swift类声明为public,否则它被视为内部类,只能在同一模块中看到,这可能是为什么将它添加到与文件工作相同的项目中的原因,但作为一个框架并没有。我遇到的另一件事是框架可能需要在类声明前面添加@objc,以便在objective-c类中看到它。另外在目标c和swift之间阅读Apple的Mix and Match指南,它说当你导入外部框架时,你需要确保你导入的框架的Defines Module构建设置被设置为Yes 。你有没有检查过这些选项?
答案 1 :(得分:1)
Jus使用
@import SwiftModuleName;
语法,并确保要使用的功能是公共的(和@objc)
答案 2 :(得分:-2)
就我而言,没有“ use_frameworks!”进入podfile(旧项目)。
我添加了它,然后就可以像这样使用导入
#import“ PODNAME-Swift.h”
并使用pod中的类。
但是最后,由于缺乏客观的c解释,我无法使用该快捷盒。我相信在很多情况下这都是问题。