2015-06-04 5 views
0

Я пытаюсь сохранить массив структур хранилища в моей структуре users, но я не могу заставить это правильно печатать.Как правильно напечатать структуру?

struct users { 
    var name: String = "" 
    var stores: [store] 
} 

struct store { 
    var name: String = "" 
    var clothingSizes = [String : String]()   
} 

var myFirstStore = store(name: "H&M", clothingSizes: ["Shorts" : "Small"]) 
var mySecondStore = store(name: "D&G", clothingSizes: ["Blouse" : "Medium"]) 

var me = users(name: "Me", stores: [myFirstStore, mySecondStore]) 
println(me.stores) 

ответ

9

Вы инициализируете их в порядке. Проблема заключается в том, что структура использует печать по умолчанию, которая является уродливой измененной версией имени структуры.

Если вы сделаете это соответствует CustomStringConvertible, он должен распечатать красиво:

// For Swift 1.2, use Printable rather than CustomStringConvertible 
extension Store: CustomStringConvertible { 
    var description: String { 
     // create and return a String that is how 
     // you’d like a Store to look when printed 
     return name 
    } 
} 

let me = Users(name: "Me", stores: [myFirstStore, mySecondStore]) 
println(me.stores) // prints "[H&M, D&G]" 

Если код печати является довольно сложным, иногда это лучше реализовать Streamable вместо:

extension Store: Streamable { 
    func writeTo<Target : OutputStreamType>(inout target: Target) { 
     print(name, &target) 
    } 
} 

P.S. соглашение должно иметь такие типы, как structs, начинающиеся с заглавной буквы

Смежные вопросы