Swift equivalent to Objective-C FourCharCode single quote literals (e.g. 'TEXT')

后端 未结 7 2454
天命终不由人
天命终不由人 2021-02-20 12:54

I am trying replicate some Objective C cocoa in Swift. All is good until I come across the following:

// Set a new type and creator:
unsigned long type = \'TEXT\         


        
相关标签:
7条回答
  • 2021-02-20 13:45

    Extend ExpressibleByStringLiteral to use four-character string literals directly:

    extension FourCharCode: ExpressibleByStringLiteral {
    
        public init(stringLiteral value: StringLiteralType) {
            if let data = value.data(using: .macOSRoman), data.count == 4 {
                self = data.reduce(0, {$0 << 8 + Self($1)})
            } else {
                self = 0
            }
        }
    
    }
    

    Now you can just pass a string literal as the FourCharCode / OSType / UInt32 parameter:

    let record = NSAppleEventDescriptor.record()
    record.setDescriptor(NSAppleEventDescriptor(boolean: true), forKeyword: "test")
    
    0 讨论(0)
提交回复
热议问题