38 lines
962 B
Swift
38 lines
962 B
Swift
//
|
|
// FourCharCode.swift
|
|
// RSCore
|
|
//
|
|
// Created by Olof Hellman on 1/7/18.
|
|
// Copyright © 2018 Olof Hellman. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public extension String {
|
|
|
|
/// Converts a string to a `FourCharCode`.
|
|
///
|
|
/// `FourCharCode` values like `OSType`, `DescType` or `AEKeyword` are really just
|
|
/// 4-byte values commonly represented as values like `'odoc'` where each byte is
|
|
/// represented as its ASCII character. This property turns a Swift string into
|
|
/// its `FourCharCode` equivalent, as Swift doesn't recognize `FourCharCode` types
|
|
/// natively just yet. With this extension, one can use `"odoc".fourCharCode`
|
|
/// where one would really want to use `'odoc'`.
|
|
var fourCharCode: FourCharCode {
|
|
precondition(count == 4)
|
|
var sum: UInt32 = 0
|
|
for scalar in self.unicodeScalars {
|
|
sum = (sum * 256) + scalar.value
|
|
}
|
|
return sum
|
|
}
|
|
}
|
|
|
|
public extension Int {
|
|
|
|
var fourCharCode: FourCharCode {
|
|
return UInt32(self)
|
|
}
|
|
}
|
|
|