【问题标题】:How to pass an Int value to an Objective C function from Swift?如何从 Swift 将 Int 值传递给 Objective C 函数?
【发布时间】:2017-02-24 12:53:39
【问题描述】:

我想将一个整数值从 Swift 传递给我可以处理它的 Objective C 函数。

Objective C 函数定义是

 (void)getAllDevices:(NSInteger *)limit :(NSInteger *)offset

Objective C 函数是名为 DemoSDK 的 SDK 的一部分。

我尝试使用此函数调用从 Swift 传递值

我试过这样做

DemoSDK.getAllDevices(10,10)

但随之而来的错误是

无法将 Int 类型的值转换为 UnsafeMutablePointer 类型的预期参数

我对 Objective C 非常陌生,这绝对是一个业余问题。 我想将一个 int 值发送到可以处理 int 值的目标 C 函数。我该怎么做?请帮忙。

【问题讨论】:

  • 你没有传递NSInteger,你传递的是NSInteger *。在没有看到更多代码的情况下,我无法为您提供很多帮助,但您可以尝试执行类似(一行,抱歉)var limit = 10; var offset = 10; withUnsafePointer(to: &limit) { limit in withUnsafePointer(to: &offset) { offset in DemoSDK.getAllDevices(limit, offset) } }
  • NSInteger 不是指针类型,对于 from 方法调用 remove * 前面的 NSInteger 再试试。

标签: objective-c swift


【解决方案1】:

参数不要求整数,它们要求引用整数。这是通过 Swift 中的& 实现的。

var limit = Int()
var offset = Int()

DemoSDK.getAllDevices(&limit, &offset)

【讨论】:

  • Nitpick - 在 Objective-C 代码中,它要求提供指向整数的指针,而不是引用。
【解决方案2】:

有两种相似但不同的方法可能会出错。

  • 通常的方法是

    init(contentsOfURL url: NSURL,
        encoding enc: UInt) throws
    

    encoding参数采用NSStringEncoding值来指定编码,例如

    let string = try? String(contentsOfURL:url, encoding:NSUTF8StringEncoding)
    

  • 第二种方法检索通过将指针作为usedEncoding参数传递来从文件中获取编码

    init(contentsOfURL url: NSURL,
        usedEncoding enc: UnsafeMutablePointer<UInt>) throws
    

    文档说:

    返回时,如果 url 读取成功,则包含使用的编码 解释数据。

    这意味着您必须传递一个指针,该指针将包含文件的确定编码。

    var encoding : NSStringEncoding = 0
    let string = try? String(contentsOfURL:url, usedEncoding:&encoding)
    

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2013-04-12
    相关资源
    最近更新 更多