Fantastic, thanks to both of you. I merged it here: https://github.com/apple/swift-evolution/blob/master/proposals/0089-rename-string-reflection-init.md <https://github.com/apple/swift-evolution/blob/master/proposals/0089-rename-string-reflection-init.md>
Please let me know if you’d like any other changes, I’ll kick off the review on Tuesday. -Chris > On May 28, 2016, at 3:33 PM, Brent Royal-Gordon <[email protected]> > wrote: > >> If anyone is curious, the revised proposal can be found here: >> https://github.com/austinzheng/swift-evolution/blob/2b31df6163f5c5d1975a37e72c6996b82d61a5c6/proposals/0089-rename-string-reflection-init.md > > This is great. My only suggestion is that `init?(description: String)` should > be `init?(_ description: String)`, since by definition the conversion is > fullwidth. But you may already be planning to incorporate that change, since > Chris mentioned it. > > Just quickly scanning the docs on swiftdoc.org, here are protocols which I > think should conform to LosslessStringConvertible: > > * FloatingPoint > * Integer > * Boolean? > > And here are concrete types: > > * Bool (if not Boolean) > * Character > * String (kind of circular, but I think it's a good idea) and its views > * String.Index? (Not sure how to represent this; UTF-8 offset, maybe?) > * UnicodeScalar > > Protocols which would require conditional conformances: > > * RangeReplaceableCollection where Iterator.Element == Character or > UnicodeScalar > * SetAlgebra where Iterator.Element == Character or UnicodeScalar > > These protocols were chosen because they include `init<S: Sequence where > S.Iterator.Element == Iterator.Element>(_: S)` initializers. > > Generic types which would require conditional conformances: > > * ClosedRange where Bound: LosslessStringConvertible > * CountableClosedRange where Bound: LosslessStringConvertible > * CountableRange where Bound: LosslessStringConvertible > * Range where Bound: LosslessStringConvertible > > These would be non-trivial, but useful. They could have a serialization like: > > var description: String { > let operator = "..<" // or "..." for the closed ranges > func escape(_ string: String) -> String { > let escapedOperator = > String(operator.characters.flatMap { ["\\", $0] }) > return string.replacingOccurrences(of: "\\", with: > "\\\\").replacingOccurrences(of: operator, with: escapedOperator) > } > > return escape(String(lowerBound)) + " " + operator + " " + > escape(String(upperBound)) > } > > The `init(_: String)` method would need to handle the escapes—hence the > nontrivial-ness. > > Technically possible, but probably unwise: > > * ObjectIdentifier > * UnsafePointer and friends > * Set.Index and Dictionary.Index > > -- > Brent Royal-Gordon > Architechies >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
