> I can't understand this. For me ValuePreservingStringConvertible usually will 
> be different than CustomStringConvertible. Can't I want to have some string 
> view of my struct to present data(also in UI) *and* value preserving string 
> value for the same struct?
> So my .description will show something like "12.345-6.78" and value 
> preserving string will contain something like "19083749347923847293487293483" 
> to encode the data of the struct. No?

Rather than thinking of LosslessStringConvertible as a protocol for serializing 
data into a string, think of it as a protocol for those cases where the 
human-readable description is also parseable and can be used to completely 
recreate the instance. It's something you would use for things like 
command-line arguments, environment variables, interactive command-line 
programs, and configuration files that you expect humans to read and write by 
hand.

        func prompt<T: LosslessStringConvertible>(for field: String, of type: 
T.Type) -> T {
                while true {
                        print("What's your \(field)?")
                        
                        let line = readline()
                        
                        if      !line.isEmpty
                                let value = T(line) {           // how the hell 
do you indent this stupid syntax?
                                return value
                        }
                }
        }
        
        let name = prompt(for: "name", of: String)
        let age = prompt(for: "age", of: Int)
                
        let answer = age < 13 ? " not" : ""
        print("\(name), you are\(answer) too old to have a favorite color.")

In other words, write the `description` first, and then decide if you can write 
a good `init(_ description:)` to match it.

-- 
Brent Royal-Gordon
Architechies

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to