2015-01-06 2 views
7

Я пишу инструмент командной строки с Swift, и у меня возникают проблемы с отображением цветов в моей оболочке. Я использую следующий код:Цветной вывод с инструментом командной строки Swift

println("\033[31;32mhey\033[39;39m") 

или даже

NSFileHandle.fileHandleWithStandardOutput().writeData("\033[31;32mhey\033[39;39m".dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: true)!) 

Это работает, когда я использую простое эхо в PHP (текст отображается зеленым цветом), но есть причина, что Безразлично» t работать в инструменте командной строки Swift?

Спасибо!

+0

проверить это удивительное решение здесь: https://stackoverflow.com/questions/9005769/any-way-to-print-in-color-with-nslog – Martian2049

ответ

19

Swift имеет встроенную поддержку юникода. Это делает недействительным использование обратной косой черты. Так что я использую цветовые коды с синтаксисом «\ u {}». Вот код println, который отлично работает на терминале.

// \u{001B}[\(attribute code like bold, dim, normal);\(color code)m 

// Color codes 
// black 30 
// red  31 
// green 32 
// yellow 33 
// blue 34 
// magenta 35 
// cyan 36 
// white 37 

println("\u{001B}[0;33myellow") 

Надеюсь, это поможет.

+0

Это действительно работает, благодаря! –

+1

Я не работаю для меня с быстрым программированием 1.2 для iOS, я не вижу цветов на выходе – eliocs

+1

Консоль Xcode не печатает цвета, в которых вы не устанавливаете плагин XcodeColors -> https: // github .com/robbiehanson/XcodeColors – eliocs

17

На основании ответа @cyt, я написал простую переписку с этими цветами, а также перегрузил оператор +, чтобы вы могли печатать с использованием этого перечисления.

Это все up on Github, но это действительно так просто:

enum ANSIColors: String { 
    case black = "\u{001B}[0;30m" 
    case red = "\u{001B}[0;31m" 
    case green = "\u{001B}[0;32m" 
    case yellow = "\u{001B}[0;33m" 
    case blue = "\u{001B}[0;34m" 
    case magenta = "\u{001B}[0;35m" 
    case cyan = "\u{001B}[0;36m" 
    case white = "\u{001B}[0;37m" 

    func name() -> String { 
     switch self { 
     case black: return "Black" 
     case red: return "Red" 
     case green: return "Green" 
     case yellow: return "Yellow" 
     case blue: return "Blue" 
     case magenta: return "Magenta" 
     case cyan: return "Cyan" 
     case white: return "White" 
     } 
    } 

    static func all() -> [ANSIColors] { 
     return [.black, .red, .green, .yellow, .blue, .magenta, .cyan, .white] 
    } 
} 

func + (let left: ANSIColors, let right: String) -> String { 
    return left.rawValue + right 
} 

// END 


// Demo: 

for c in ANSIColors.all() { 
    println(c + "This is printed in " + c.name()) 
} 
+1

'' \ u {001B} [0; 0m "' для возврата к цвету по умолчанию. – devios1

5

Вы можете использовать радугу, если вы не возражаете, используя ее в качестве основы.

import Rainbow 
print("Red text".red) 
print("Yellow background".onYellow) 
print("Light green text on white background".lightGreen.onWhite) 

https://github.com/onevcat/Rainbow

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

  • Нет связанных вопросов^_^