다음 코드를이 라이브러리 (https://github.com/dankogai/swift-json)에서 Swift 3 호환 코드로 변환하려고합니다.스위프트 2에서 3으로 마이그레이션 String.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 동작을 올바르게 시뮬레이트하는 올바른 방법은 무엇입니까?
그래, 그 트릭을 한 많은 감사합니다! –
환영 메이트 :) –