 
             loop: while true {
                 switch decoder.decode(&generator) {
-                case .scalarValue(let char): string.append(char)
+                case .scalarValue(let char): string.unicodeScalars.append(char)
                 case .emptyInput: break loop
-                case .error: throw StringError()
+                case .error: return nil
                 }
             }
 

}

#if swift(>=3.0)
    public func += <S : Sequence where S.Iterator.Element == Byte>(lhs: inout Data, rhs: S) {
        return lhs.bytes += rhs
    }
#else

    }

    #if swift(>=3.0)
        public init<S : Sequence>(_ elements: S) where S.Iterator.Element == Byte {
            self.init(Array(elements))
        }
    #else
