【问题标题】:Pass Swift Array to Objective-C Class as NSArray将 Swift 数组作为 NSArray 传递给 Objective-C 类
【发布时间】:2015-05-20 16:56:26
【问题描述】:

我调用的方法在 Objective C 中定义为:

@interface F53OSCMessage : F53OSCPacket <NSCoding, NSCopying>
{
    NSString *_addressPattern;
    NSString *_typeTagString;
    NSArray *_arguments;
    id _userData;
}

我正在尝试将这个变量从 Swift 传递给它:

var test = [1, 2, "string"];

我试过这样做:

var message = F53OSCMessage(addressPattern: endpoint, arguments: test);

var message = F53OSCMessage(addressPattern: endpoint, arguments: test as NSArray!);

但是当我这样做时,我得到了错误:

找不到接受类型为“(addressPattern: String, arguments: NSArray!)”的参数列表的“F53OSCMessage”类型的初始化程序

然后我尝试了(根据 Xcode 的建议):

var message = F53OSCMessage(addressPattern: endpoint, arguments: args as [AnyObject]!);

但这给了我几个 Apple Macho-O 链接器错误:

“_OBJC_CLASS_$_F53OSCClient”,引用自:

clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

知道发生了什么吗?我对为什么 Xcode 需要 [AnyObject] 感到困惑,即使该方法将 _arguments 定义为 NSArray。像这样调用方法有效,这让我更加困惑。

var message = F53OSCMessage(addressPattern: endpoint, arguments: "");

【问题讨论】:

  • “但这给了我几个 Apple Macho-O 链接器错误” - 不是,导致链接器错误的不是相关更改。 更改修复 你的代码以便它编译。 它没有链接的事实意味着你没有将最终的可执行文件与包含@的目标文件链接987654328@班级。
  • 根据 Xcode 的建议,它对参数参数的期望是什么:?
  • @Amit89 Xcode 期待 F53OSCMessage(addressPattern: &lt;#String!#&gt;, arguments: &lt;#[AnyObject]!#&gt;)
  • @TheParamagneticCroissant 我该怎么做才能解决这个问题?
  • @Alfo 哪个问题?

标签: objective-c swift


【解决方案1】:

这应该可以解决您的问题。

var test:[AnyObject] = [1, 2, "string"];
var endpoint = "www.abc.com"
var message = F53OSCMessage(addressPattern: endpoint, arguments: test);

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多