2017-02-24 62 views
0

我想从Swift传递一个整数值到Objective C函数,我可以在其中处理它。如何将Int值传递给Swift中的Objective C函数?

目标C函数定义是

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

的目标C的功能是调用DemoSDK的SDK的一部分。

我尝试使用此函数调用

从斯威夫特传递值我试图做这样

DemoSDK.getAllDevices(10,10) 

惟独误差

不能转换类型的值Int到预期的参数类型UnsafeMutablePointer

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

+1

你不能传递一个'NSInteger',你传递一个'NSInteger的*'。没有看到更多的代码,我不能给你很多帮助,但你可以尝试做一些事情(在一行中,抱歉)'var limit = 10; var offset = 10; withUnsafePointer(to:&limit){在withUnsafePointer(to:&offset)中限制{DemoSDK.getAllDevices(limit,offset)中的偏移量}}' –

+2

NSInteger不是来自NSInteger的方法调用remove *前面的指针类型,然后尝试。 –

+0

你可以尝试[不能将Int类型的值转换为UnsafeMutablePointer类型的预期参数](http://stackoverflow.com/a/36079331/3483725) –

回答

0

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

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

DemoSDK.getAllDevices(&limit, &offset) 
+1

Nitpick - 在Objective-C代码中,它要求指向整数,没有引用。 – rmaddy

0

有两种相似但不同的方法可能会被误解。

  • 通常的方法是

    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)