【问题标题】:Swift String to CCharSwift 字符串到 CChar
【发布时间】:2014-06-23 16:17:55
【问题描述】:

如何在 Swift 中获得char/CChar?我需要调用以下方法:

- (void)registerOption:(NSString *)longOption shortcut:(char)shortOption requirement:(GBValueRequirements)requirement;

我可以传递字符的 ASCII 形式,但这很烦人。有没有一种简单的方法来获取字符串中某个索引处的字符?

【问题讨论】:

标签: swift string


【解决方案1】:

您可以将 Swift 字符串转换为 Cstring,然后只获取第一个(也是唯一一个)字符:

var charString = "a"
var ccharOptional = charString.cStringUsingEncoding(NSUTF8StringEncoding)?[0]  // CChar?
var cchar = (charString.cStringUsingEncoding(NSUTF8StringEncoding)?[0])!       // CChar

【讨论】:

  • 谢谢。可惜没有更简单/更漂亮的方法来做到这一点。
【解决方案2】:

使用 Swift 3.0:

let cchar = "a".utf8CString[0]

(不确定这是什么时候引入的)

【讨论】:

    【解决方案3】:

    在 swift3 (3.0.2) 中: let cchar = "abc".cString(using: .utf8) 返回 CChar 数组。

    【讨论】:

      【解决方案4】:

      使用 Swift 5,您可以使用以下两种方法之一从 String 实例中获取 CChar 的集合。


      #1。使用Swiftutf8CString 属性

      String 有一个utf8CString 属性。 utf8CString 有以下声明:

      var utf8CString: ContiguousArray<CChar> { get }
      

      字符串的连续存储的以 null 结尾的 UTF-8 表示。

      下面的 Playground 示例代码展示了如何使用utf8CString

      let string = "Café ?"
      let bytes = string.utf8CString
      print(bytes) // prints: [67, 97, 102, -61, -87, 32, -16, -97, -111, -115, 0]
      

      #2。使用StringProtocolcString(using:)方法

      Foundation 提供String 一个cString(using:) 方法。 cString(using:) 有以下声明:

      func cString(using encoding: String.Encoding) -> [CChar]?
      

      使用给定的编码将字符串的表示形式返回为 C 字符串。

      下面的 Playground 示例代码展示了如何使用 cString(using:) 从字符串中获取 CChar 的集合:

      import Foundation
      
      let string = "Café ?"
      let bytes = string.cString(using: String.Encoding.utf8)
      print(bytes) // prints: Optional([67, 97, 102, -61, -87, 32, -16, -97, -111, -115, 0])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-16
        • 2016-02-13
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        相关资源
        最近更新 更多