在Swift中将单个C字符转换为字符串

3

我正在尝试在我的Swift项目中使用MailCore2 (Objective C)。

目前,我正在尝试从服务器检索所有IMAP文件夹(到目前为止这个功能还可以),并通过定界符拆分路径。

INBOX.Sent
INBOX.Drafts

to

INBOX
 > Sent
 > Drafts

MCOIMAPFolder 有一个名为 delimiter 的属性,它是一个 char 类型。如果我尝试打印它或使用它来分割路径:

print("\(folder.delimiter)\n")
var components = folder.path.componentsSeparatedByString(String.init(folder.delimiter))
for component in components {
    print("\(component)\n")
}

它会打印

46
INBOX.Sent

我在这里找到的最接近的问题是将C字符数组转换为字符串,但似乎只适用于char[]而不是单个char
那么我错过了什么吗?

@Freenode-newbostonSebivor:这个问题是关于 C 和 Swift 之间的互操作性。我不知道常规政策是什么,但我在这种情况下看到过很多同时带有这两个标签的问题。 - Martin R
1
@MartinR 这个问题涉及到支持Swift、C、C++以及可能还有其他编程语言的ABI之间的互操作性... 对于所有这些语言的问题和答案都是相同的,因此它们都应该被打上标签,对吧? - autistic
@MartinR 你可以看到类似的讨论已经在emKay链接到的相关问题中展开了... 那个讨论结果如何? - autistic
2
@Freenode-newbostonSebivor,MartinR 我认为我们不必在这里再次开始这个讨论。我删除了 [c] 标签,因为问题的目标是 Swift 而不是 C。非常感谢你们的帮助! - dasmaximum
1
@emKay 或许添加 [interop] 标签会比较好? - autistic
显示剩余4条评论
1个回答

6

C类型的char在Swift中被映射为CChar,它是Int8的别名。您可以使用以下代码从单个C字符创建Swift字符串:

let delim = String(UnicodeScalar(UInt8(bitPattern: folder.delimiter)))

这将给定的char解释为Unicode值,范围在0 ... 255之间,并将其转换为String

做到了,谢谢!为自己辩护一下,这不是很明显,对吧?;-) - dasmaximum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接