2016-09-28 55 views
3

我试图将以下代码从此库(https://github.com/dankogai/swift-json)转换为Swift 3兼容代码。Swift 2 to 3 Migration String.fromCString

有关于fromCString功能,这在以前对斯威夫特2

错误字符串提供错误的众多大致相同无处不在:

“fromCString”是不可用:请使用String.init?(validatingUTF8 :)来代替。请注意,它不再接受NULL作为有效输入。另外考虑使用String(cString :),它将尝试修复不合格的代码单元。

看到我有2个选择可供选择我不确定给出原作者意图的正确的一个。

例如这里有一个错误代码片段。

extension JSON : CustomStringConvertible { 
    /// stringifies self. 
    /// if pretty:true it pretty prints 
    public func toString(pretty:Bool=false)->String { 
     switch _value { 
     case is NSError: return "\(_value)" 
     case is NSNull: return "null" 
     case let o as NSNumber: 
      switch String.fromCString(o.objCType)! { 
      case "c", "C": 
       return o.boolValue.description 
      case "q", "l", "i", "s": 
       return o.int64Value.description 
      case "Q", "L", "I", "S": 
       return o.uint64Value.description 
      default: 
       switch o.doubleValue { 
       case 0.0/0.0: return "0.0/0.0" // NaN 
       case -1.0/0.0: return "-1.0/0.0" // -infinity 
       case +1.0/0.0: return "+1.0/0.0" // infinity 
       default: 
        return o.doubleValue.description 
       } 
      } 
     case let o as NSString: 
      return o.debugDescription 
     default: 
      let opts = pretty ? JSONSerialization.WritingOptions.prettyPrinted : JSONSerialization.WritingOptions() 
      if let data = (try? JSONSerialization.data(
       withJSONObject: _value, options:opts)) as NSData? { 
        if let result = NSString(
         data:data as Data, encoding:String.Encoding.utf8.rawValue 
         ) as? String { 
          return result 
        } 
      } 
      return "YOU ARE NOT SUPPOSED TO SEE THIS!" 
     } 
    } 
    public var description:String { return toString() } 
} 

注意上述代码中的CString。什么是正确模拟Swift 2行为的正确方法?

回答

7

由于错误提示使用init(cString:)就像这样。

String(cString:o.objCType) 

检查Apple Documentation了解更多详情。

+0

是的,做了诡计,非常感谢! –

+0

欢迎伴侣:) –