如何在 Objective-C 项目中导入和使用 Swift Pod Framework
How to import and use Swift Pod Framework in Objective-C Project
我一直在尝试检查 CocoaPods 新框架设置以使 Pods 正常运行,但我在使用 Swift 中的 Objective-C 时遇到问题] 项目。
首先,这是 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 class 中使用 CocoaPods 创建的纯 Swift 框架?
疑难解答
主要是我一直在尝试各种导入。苹果推荐@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
文件单独添加到项目中,它工作得很好。
我认为你必须将 swift class 声明为 public,否则它会被视为内部 class 并且只能在相同的内部看到模块,这可能是为什么将它添加到同一个项目中作为文件工作,但作为框架不工作的原因。我想到的另一件事是,框架可能需要在 class 声明前面添加 @objc,以便可以在 objective-c classes 中看到它。还阅读 Apple 在 objective c 和 swift 之间的 Mix and Match 指南,它说当您导入外部框架时,您需要确保要导入的框架的 Defines Module 构建设置是设置为是。您检查过这些选项中的任何一个吗?
只需使用
@import SwiftModuleName;
语法,并确保您要使用的函数是public(和@objc)
在我的例子中没有“use_frameworks!”进入 podfile(旧项目)。
我添加了它,然后我就可以像那样使用导入了
#import "PODNAME-Swift.h"
并使用 pod 中的 类。
但最终我无法使用那个 swift pod,因为缺少 objective c 说明。我相信在很多情况下这将是问题。
我一直在尝试检查 CocoaPods 新框架设置以使 Pods 正常运行,但我在使用 Swift 中的 Objective-C 时遇到问题] 项目。
首先,这是 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 class 中使用 CocoaPods 创建的纯 Swift 框架?
疑难解答
主要是我一直在尝试各种导入。苹果推荐@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
文件单独添加到项目中,它工作得很好。
我认为你必须将 swift class 声明为 public,否则它会被视为内部 class 并且只能在相同的内部看到模块,这可能是为什么将它添加到同一个项目中作为文件工作,但作为框架不工作的原因。我想到的另一件事是,框架可能需要在 class 声明前面添加 @objc,以便可以在 objective-c classes 中看到它。还阅读 Apple 在 objective c 和 swift 之间的 Mix and Match 指南,它说当您导入外部框架时,您需要确保要导入的框架的 Defines Module 构建设置是设置为是。您检查过这些选项中的任何一个吗?
只需使用
@import SwiftModuleName;
语法,并确保您要使用的函数是public(和@objc)
在我的例子中没有“use_frameworks!”进入 podfile(旧项目)。
我添加了它,然后我就可以像那样使用导入了
#import "PODNAME-Swift.h"
并使用 pod 中的 类。
但最终我无法使用那个 swift pod,因为缺少 objective c 说明。我相信在很多情况下这将是问题。