标签: objective-c-swift-bridge

Swift Bridging Header导入问题

按照说明,我创建了一个桥接标题并添加到我的项目中.不幸的是,发生了以下错误:

:0:错误:无法导入Objective-C标题'--- path - to --- header/.... h'

截图1

在构建设置中,我将标题搜索路径字符串添加到桥接标题的位置,但没有任何帮助.

有没有人遇到过这个问题?

ios swift xcode6 objective-c-swift-bridge

119
推荐指数
8
解决办法
13万
查看次数

无法从Objective-C访问Swift类型的属性

我试图Double?从Objective-C 访问Swift类的属性.

class BusinessDetailViewController: UIViewController {

    var lat : Double?
    var lon : Double?

    // Other elements...
}
Run Code Online (Sandbox Code Playgroud)

在另一个视图控制器中,我试图访问lat如下:

#import "i5km-Swift.h"
@interface ViewController ()

@property (strong, nonatomic) BusinessDetailViewController *businessDetailViewController;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.businessDetailViewController = [[BusinessDetailViewController alloc] initWithNibName:@"BusinessDetailViewController" bundle:nil];
    self.businessDetailViewController.lat = businessArray[1]; /* THIS GIVES ME AN ERROR */
}
Run Code Online (Sandbox Code Playgroud)

我正在接受

在'BusinessDetailViewController*'类型的对象上找不到属性'lat'

为什么我不能访问这个属性?我错过了什么?

types objective-c swift objective-c-swift-bridge

60
推荐指数
2
解决办法
3万
查看次数

如何在不出错的情况下删除桥接头?

前几天我在我的应用程序中添加了一个桥头,因为我试图将Objective-C文件添加到我的Swift项目中.我无法使连接工作(我也不知道如何实现Objective-C文件),所以我决定我想重新开始.我删除了Objective-C文件和Bridge-Header文件,现在我收到一条错误信息:
<unknown>:0: error: bridging header '/Users/CalebKleveter/Documents/Development/iOS/personal/swift/Projects/Dicey/Dicey/Dicey-Bridging-Header.h' does not exist

Xcode Bridge-Header错误 Xcode项目的文件树

xcode objective-c ios swift objective-c-swift-bridge

29
推荐指数
2
解决办法
1万
查看次数

无法为桥接标头发出预编译的标头

我从GitHub下载了一个项目,然后pod下面的文件,其中一些是由OBJ-C编写的,我使用了一个桥头.

pod ‘SnapKit’
pod ‘MJRefresh’
pod ‘Alamofire’
pod ‘Kingfisher’
pod ‘MBProgressHUD’
pod ‘pop’
pod ‘EVReflection’
pod ‘StreamingKit’
pod ‘iCarousel’
pod ‘ReflectionView’
Run Code Online (Sandbox Code Playgroud)

当我使用Xcode 9.0 beta 2运行项目时,遗憾的是错误日志如下:

错误:未能发出预编译头'/var/folders/kd/4gh0_kxx3jx4thjb_sssmmcw0000gn/T/EvoRadio-Bridging-Header-97bd5f.pch'用于桥接标题'/ Users/ringo/Downloads/EvoRadio-master/EvoRadio/Resources/EvoRadio-桥接-Header.h"

我用google搜索,但没有这样的问题.错误意味着它需要一个PCH文件?这是我的.pch标题配置: 在此输入图像描述 它解决不了.

怎么做?

compiler-errors ios swift objective-c-swift-bridge

27
推荐指数
8
解决办法
3万
查看次数

类型"SwiftClass"不符合协议"ObjcProtocol",因为它具有无法满足的要求

我有一个Objective-C协议,我试图在Swift类中实现.例如:

@class AnObjcClass;

@protocol ObjcProtocol <NSObject>
    - (void)somethingWithAnArgument:(AnObjcClass *)arg;
@end
Run Code Online (Sandbox Code Playgroud)

当我尝试在这样的Swift类中符合它时:

@objc class SwiftClass: NSObject, ObjcProtocol {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我得到以下可怕的编译器错误:

类型"SwiftClass"不符合协议"ObjcProtocol",因为它具有无法满足的要求.

我该如何解决这个问题?

objective-c objective-c-protocol swift objective-c-swift-bridge

19
推荐指数
1
解决办法
3371
查看次数

如何修改SWIFT_MODULE_NAME?

标题说明了一切.我在SWIFT_MODULE_NAME的构建设置中搜索过,但没有任何内容.我也在线搜索,并且有对此名称的引用,但没有关于如何定义的信息.此外,我在Apple Docs中找不到任何提及SWIFT_MODULE_NAME的信息.

我知道这一点:它用于"Objective-C Generated Interface Header Name"构建设置,可以通过双击设置值来查看:

$(SWIFT_MODULE_NAME)-Swift.h

它用于弥合Objective-C和Swift之间的差距,并且只出现在包含Swift文件的项目中(以及我假设的Objective-C文件).截至发布时,Xcode 7.3是最新最好的.

但是,这个值定义在哪里,我该如何修改它?

xcode objective-c ios swift objective-c-swift-bridge

16
推荐指数
3
解决办法
9482
查看次数

如何将NSDictionary转换为字典?

我已经更新到XCode 8,现在我需要将我的代码从Swift 2转换为Swift 3.

以前,当我想转换NSDictionaryDictionary,我只是写了以下内容:

let post_paramsValue = post_params as? Dictionary<String,AnyObject?>
Run Code Online (Sandbox Code Playgroud)

哪里post_paramsNSDictionary.

但是现在使用Swift 3,我收到了这个错误:

NSDictionary is not convertible to Dictionary
Run Code Online (Sandbox Code Playgroud)

为什么?改变了什么?


编辑1

我也尝试过以下方法:

let post_paramsValue = post_params as Dictionary<String,Any>
Run Code Online (Sandbox Code Playgroud)

但是这给出了这个错误:

'NSDictionary的!'  不能转换为'Dictionary <String,Any>';  你的意思是使用<code>NSDictionary</code>而不是<code>NSDictionary!</code>,但它不起作用; 我收到了这个错误:</p>

<p><a rel='NSDictionary'不能转换为'Dictionary <String,Any>';  你的意思是使用<code> as!</ code>强制转发?


编辑3

我也尝试过以下方法:

let post_paramsValue =  post_params as Dictionary<String,Any>
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

'NSDictionary的!'  不能转换为'Dictionary <String,Any>!';  你的意思是使用<code> as!</ code>强制转发?

dictionary nsdictionary swift objective-c-swift-bridge

8
推荐指数
1
解决办法
1万
查看次数

Objective-C - 现有代码库的Swift桥接性能

对于具有将swift添加到现有Objective-C代码库中的经验的开发人员而言,这是一个性能问题.

我的前提是:最终Bridging-Header.h可能变得非常大(它可能最终包含所有1.5k存在的Objective-C类(给予或接受那些不能从Swift访问的类)),反之亦然PRODUCT-Swift.h生成头.

我担心编译性能可能会急剧下降:每次包含的.h类都发生变化时,都必须重新编译所有.swift文件.

是这样的吗?如果是这样,有没有办法优化性能?

澄清:想象一下,您将整个项目类包含到.pch文件中,现在每个类更改都会触发整个项目的重新编译.这种方式类似Bridging-Header.h吗?

objective-c swift objective-c-swift-bridge

7
推荐指数
1
解决办法
425
查看次数

React Native 桥接:将 JSON 传递给 Swift 函数

我是 Swift 和 Objective-C 的新手,但我试图建立从 React Native 到 Swift 的桥梁,并将 JSON 和 JSON 数组作为参数发送给 Swift。

在 React 中我想调用这个函数:

startTrack('some url string', { artist: 'Bruce Springsteen', title: 'Born in the USA' }, [{ url: 'url', type: 'image' }, { url: 'another url', type: 'link' ]})
Run Code Online (Sandbox Code Playgroud)

所以一个字符串、一个对象和一个对象数组。

在我的桥接 Objective-C 文件中,我有以下内容:

RCT_EXTERN_METHOD(startTrack:(NSString *)url trackinfo:(NSDictionary *)trackinfo slides:(NSDictionaryArray *)slides)
Run Code Online (Sandbox Code Playgroud)

在我的 swift 文件中,我尝试了很多组合,但似乎没有任何结果:

  @objc func startTrack(url: String, trackinfo: [String: Any], slides: [[String: Any]]) {
    print("Play test", url, trackinfo, slides)
  }
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息: 反应本机错误消息

如何将我的参数一直发送到我的 Swift 文件?

谢谢

/彼得

json objective-c swift objective-c-swift-bridge react-native

6
推荐指数
1
解决办法
5423
查看次数

转发声明一个 Swift 类以在 Objective-C 头文件中使用它

我正在尝试将 Swift 类导入到 Objective-C 头文件中。我知道Project-Swift.h桥只能导入到实现文件 (.m) 中,但我有一个 Objective-C 头文件,需要声明一个在 Swift 中定义的属性。

我在某处读到这可以通过在头文件中向前声明类并导入Project-Swift.h到实现文件中来完成。当我这样做时,错误得到解决,但我无法访问任何类属性。

例子:

// Square.swift

@objc class Square: NSObject {
  var width: Int?
  var height: Int?
}

// Shapes.h

@class Square;

@interface Shapes: NSObject {
  @property(nonatomic, strong) Square *square;
}

// Shapes.m

#import "Shapes.h"
#import "Product-Swift.h"

@implementation Shape

@end

// Somewhere else in the code

Shapes *shapes = [Shapes new];
NSLog(@"%@", @(shapes.square.width)); <-- Property 'width' not found on object of type 'Square *'
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供有关如何访问 Swift 类及其属性的建议?

types objective-c swift objective-c-swift-bridge

6
推荐指数
1
解决办法
2484
查看次数