- (id) 来自 Swift 中的 Obj-C Lib?

Posted

技术标签:

【中文标题】- (id) 来自 Swift 中的 Obj-C Lib?【英文标题】:- (id) from Obj-C Lib in Swift? 【发布时间】:2014-06-06 01:29:46 【问题描述】:

起初,我在 Obj-C 方面非常非常糟糕(不喜欢语法),但现在我喜欢使用 Swift 开发 iPhone :D

这是我的问题,我尝试使用 Obj-C 库 (xmppframework),但是当我尝试初始化 XMPPRoster 时,所需的方法不可用...

Objective-C 用法:

xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] initWithInMemoryStore];  
xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:xmppRosterStorage];

但在我的 Swift 类中,方法“initWithRosterStorage”不可用:(

斯威夫特:

var jabberRosterStorage: XMPPCoreDataStorage = XMPPCoreDataStorage()
var jabberRoster:XMPPRoster = XMPPRoster(....)

XMPPRoster.m:

- (id)initWithRosterStorage:(id <XMPPRosterStorage>)storage

    return [self initWithRosterStorage:storage dispatchQueue:NULL];

也许 Swift 的 (id) 有问题,因为在 Swift 中我认为它现在是 AnyObject

【问题讨论】:

var jabberRoster:XMPPRoster = XMPPRoster(storage : jabberRosterStorage) 给你什么错误? 【参考方案1】:

尝试在 Swift 中像这样初始化它:

var jabberRosterStorage: XMPPCoreDataStorage, XMPPRosterStorage = XMPPCoreDataStorage()

var jabberRoster: XMPPRoster = XMPPRoster(rosterStorage: jabberRosterStorage)

Swift 会将[[Class alloc] initWithVar:variable] 转换为Class(var: variable)

Reference

【讨论】:

我已经尝试过了。错误:调用中的参数标签不正确(有 'rosterStorage:',预期为 'dispatchQueue')......但这很奇怪,因为在 XMPPRoster.h 中它定义如下 - ( id)initWithRosterStorage:(id )storage; - (id)initWithRosterStorage:(id )storage dispatchQueue:(dispatch_queue_t)queue; 我已经更新了我的答案。尝试将jabberRosterStorage 转换为所需的协议。 我也有同样的问题,请帮忙

以上是关于- (id) 来自 Swift 中的 Obj-C Lib?的主要内容,如果未能解决你的问题,请参考以下文章

obj-c 项目错误中的 PagingMenuController swift 库

在swift或obj-c中的uitextview末尾添加一个视图

在 swift 数据模型中使用来自 Objective-C++ 框架的数据类型

在 swift 数据模型中使用来自 Objective-C++ 框架的数据类型

在 Swift 中使用 Obj-C 类扩展?

在 Swift 中使用 Obj-C 类扩展?