2015-03-05 2 views

ответ

4

Обновление для Swift 2: В Swift 2, структуры по умолчанию печатается со всеми свойствами:

let str = SCNVector3Make(1, 2, -8) 
print("vector \(str)") 
// Output: 
// vector SCNVector3(x: 1.0, y: 2.0, z: -8.0) 

Вы можете настроить вывод по суматохе pting протокол о CustomStringConvertible :

extension SCNVector3 : CustomStringConvertible { 
    public var description: String { 
     return "[\(x), \(y), \(z)]" 
    } 
} 

let str = SCNVector3Make(1, 2, -8) 
print("vector \(str)") 
// Output: 
// vector [1.0, 2.0, -8.0] 

Предыдущий ответ:

Как Эрик уже объяснил, println() проверяет, является ли объект соответствует к протоколу Printable. Вы можете добавить соответствие для SCNVector3 с пользовательским расширением:

extension SCNVector3 : Printable { 
    public var description: String { 
     return "[\(self.x), \(self.y), \(self.z)]" 
    } 
} 

var str = SCNVector3Make(1, 2, -8) 
println("vector \(str)") 
// Output: 
// vector [1.0, 2.0, -8.0] 
+0

Прохладный, спасибо за код. –

+0

Версия для печати была переименована в CustomStringConvertible. Спасибо за фрагмент! – Crashalot

+0

@Crashalot: Вы совершенно правы, я обновил ответ. Спасибо, что дали мне знать! –

2

Если вы пойдете и посмотрите на определение SCNVector3, вы увидите, что его структура и не имеет методов для печати так, как вы хотите. Структура в Swift, которая выводит описание, будет соответствовать протоколу Printable.

Поскольку эта структура не делает для вас, распечатывать каждый компонент по отдельности:

println("Vector: [\(str.x), \(str.y), \(str.z)]") 

Вывод: Vector: [1,0, 2,0, -8,0]

+0

Благодаря это будет работать, но я искал векторизовать печати инлайн как Perl. –

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