2016-09-28 3 views
3

다음 코드를이 라이브러리 (https://github.com/dankogai/swift-json)에서 Swift 3 호환 코드로 변환하려고합니다.스위프트 2에서 3으로 마이그레이션 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

환영 메이트 :) –

관련 문제