【问题标题】:How do i translate this from Objective-C to Swift我如何将它从 Objective-C 翻译成 Swift
【发布时间】:2015-01-27 22:57:48
【问题描述】:

我不清楚如何在 Swift 中使用 Radio Icecast 库。我如何将以下内容翻译成 Swift?

radio = [[Radio alloc] init:@"my app"];
[radio connect:STREAM_URL withDelegate:self withGain:(1.0)];
playing = YES;   

【问题讨论】:

  • 什么是电台?这听起来不像是苹果提供的东西。它有 Swift 接口吗?
  • 它来自这个项目github.com/hamedh/Radio。不,但我正在尝试使用桥接头。

标签: objective-c swift radio translate


【解决方案1】:

这个类实现init的方式不正确。通常你会看到一个名为init(不带参数)的方法,如果你需要一个带有用户代理参数的渲染,这个方法将被称为initWithUserAgent:

所以,在Radio.h 文件中,找到以下声明:

- (id)init:(NSString *)userAgent;

并将其替换为:

- (id)initWithUserAgent:(NSString *)userAgent;

Radio.m 文件执行相同操作。

那么Objective-C的语法就变成了:

radio = [[Radio alloc] initWithUserAgent:@"my app"];
[radio connect:STREAM_URL withDelegate:self withGain:1.0];
playing = YES;

Swift 的等价物是:

radio = Radio(userAgent: "my app")
radio.connect(STREAM_URL, withDelegate: self, withGain: 1.0)
playing = true

显然,如果这个Radio 类是在Objective-C 中实现的,那么您应该在桥接头中包含.h 文件。有关桥接头的更多信息,请参阅Swift and Objective-C in the Same Project 参考。

【讨论】:

  • 谢谢语法现在是正确的,但似乎收音机没有定义。我正在尝试在 swift github.com/hamedh/Radio 中使用这个组件。我正在尝试构建一个基于 Icecast 的广播流媒体应用程序。
  • 这听起来不像Radio.h 被添加到桥接头中。当您将这些文件添加到您的项目时,Xcode 是否会自动提示您添加桥接头?之后,您是否将#import "Radio.h" 添加到该桥接头中?
  • 不,我必须手动添加桥接头 - 这可能是问题吗?我将 Radio.h 导入桥接头。
  • 互联网上有大量文章(包括在 SO 上),概述了手动添加桥接头的步骤(并且对模块名称、各种项目设置有一些注意事项, 等等。)。就个人而言,我发现最简单的方法是再次添加 .m 和 .h 文件(不是通过添加整个文件夹,而是添加这六个文件),直到我收到有关添加桥接头的 Xcode 弹出窗口并执行此操作那样。但是,如果它告诉您它找不到Radio,那么这表明存在桥接头问题。
  • 顺便说一句,我issued pull request 修复了init 方法。我还测试了上面的语法,它编译得很好(只需确认桥接头并确保你有一个名为radioplaying 的变量)。我无法证明他的其余代码(缺少属性和使用暴露的 ivars 使这个代码库有点过时了)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多