【问题标题】:How to pass a Swift string to a c function?如何将 Swift 字符串传递给 c 函数?
【发布时间】:2014-08-19 08:35:12
【问题描述】:

我在将字符串从 swift 传递到用 c 编写的函数时遇到严重问题。

我正在尝试在我的 swift 代码中执行此操作

var address = "192.168.1.2"
var port = 8888

initSocket(address, port)

c 函数如下所示:

void initSocket(char *address, int port);

我收到错误: 无法将“Void”类型的表达式转换为“CMutablePointer”类型

我似乎找不到有效的解决方案。

【问题讨论】:

  • 我认为如果你在 C 端有 const char* 参数,它会无缝工作。
  • Wojtek 你是我的英雄!非常感谢.. 解决方案:将 c 函数更改为 initSocket(const char* address) 并将字符串声明更改为 `var address: CString = "192.168.1.2" 再次感谢!
  • @WojtekSurowka,看起来像是对我的回答。
  • @WojtekSurowka:我认为您应该将您的评论重写为答案,以便将其标记为解决方案

标签: c xcode swift input-parameters


【解决方案1】:

Swift CStrings 与 C 常量字符串无缝协作,所以使用

void initSocket(const char *address, int port);

而不是char* 参数,并将您的address 变量声明为CString:

var address: CString = "192.168.1.2";

【讨论】:

  • 您可能需要更新该问题。在 Swift 2.2 或更新版本中,Swift 字符串不会自动桥接到 C 字符串。 C 字符串现在是 UnsafePointer<UInt8> 并且 Swift 字符串可以自动桥接到它。 CString 类型已从语言中删除。
【解决方案2】:

在 C 中,像这样声明你的参数

void setLastName(const char* lastName){

}

那么在swift中,可以直接传入一个普通的swift字符串

setLastName("Montego");

关键是在 C 中的 char 之后立即使用星号定义变量,例如:const char*

来源:https://developer.apple.com/swift/blog/?id=6

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多