2015-01-06 16 views
7

Tôi đang viết một công cụ dòng lệnh với Swift và tôi gặp sự cố khi hiển thị màu trong trình bao của mình. Tôi đang sử dụng đoạn mã sau:Màu ouput với công cụ dòng lệnh Swift

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

hoặc thậm chí

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

Nó hoạt động khi tôi sử dụng một tiếng vang đơn giản trong php (văn bản được hiển thị màu xanh lá cây) nhưng là có một lý do nó doesn' t làm việc trong một công cụ dòng lệnh Swift?

Cảm ơn!

+0

séc ra giải pháp tuyệt vời này ở đây: https://stackoverflow.com/questions/9005769/any-way-to-print-in-color-with-nslog – Martian2049

Trả lời

19

Swift đã tích hợp sẵn tính năng hỗ trợ unicode. Điều này làm mất hiệu lực bằng cách sử dụng dấu gạch chéo ngược. Vì vậy, tôi sử dụng mã màu với cú pháp "\ u {}". Đây là một mã println hoạt động hoàn hảo trên thiết bị đầu cuối.

// \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") 

Hy vọng điều đó sẽ hữu ích.

+0

Nó hoạt động trên thực tế, cảm ơn! –

+1

Tôi không làm việc cho tôi với chương trình 1.2 nhanh chóng dành cho iOS, tôi không thấy màu ở đầu ra – eliocs

+1

Bàn điều khiển Xcode không in màu trong bạn mà không cài đặt plugin XcodeColors -> https: // github .com/robbiehanson/XcodeColors – eliocs

17

Dựa trên @cyt answer, tôi đã viết một enum đơn giản với những màu này và cũng đã quá tải toán tử + để bạn có thể in bằng cách sử dụng enum đó.

Đó là tất cả up on Github, nhưng nó thực sự là đơn giản:

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 "' để đặt lại về màu mặc định. – devios1

5

Bạn có thể sử dụng cầu vồng nếu bạn không nhớ sử dụng nó như một khuôn khổ.

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

https://github.com/onevcat/Rainbow

Các vấn đề liên quan