2016-09-28 6 views
3

次のコードをこのライブラリ(https://github.com/dankogai/swift-json)からSwift 3互換コードに変換しようとしています。Swift 2〜3 ​​Migration String.fromCString

エラーはどこでもほぼ同じであるスウィフト2に文字列に

以前に利用可能だったfromCString機能に関するエラーが多数あります。

は「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

ようこそメイト:) –

関連する問題