Antidote/Antidote/StringExtension.swift

71 lines
2.3 KiB
Swift

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
import Foundation
extension String {
init(timeInterval: TimeInterval) {
var timeInterval = timeInterval
let hours = Int(timeInterval / 3600)
timeInterval -= TimeInterval(hours * 3600)
let minutes = Int(timeInterval / 60)
timeInterval -= TimeInterval(minutes * 60)
let seconds = Int(timeInterval)
if hours > 0 {
self.init(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
else {
self.init(format: "%02d:%02d", minutes, seconds)
}
}
init(localized: String, _ arguments: CVarArg...) {
let format = NSLocalizedString(localized, tableName: nil, bundle: Bundle.main, value: "", comment: "")
self.init(format: format, arguments: arguments)
}
init(localized: String, comment: String, _ arguments: CVarArg...) {
let format = NSLocalizedString(localized, tableName: nil, bundle: Bundle.main, value: "", comment: comment)
self.init(format: format, arguments: arguments)
}
func substringToByteLength(_ length: Int, encoding: String.Encoding) -> String {
guard length > 0 else {
return ""
}
var substring = self as NSString
while substring.lengthOfBytes(using: encoding.rawValue) > length {
let newLength = substring.length - 1
guard newLength > 0 else {
return ""
}
substring = substring.substring(to: newLength) as NSString
}
return substring as String
}
func stringSizeWithFont(_ font: UIFont) -> CGSize {
return stringSizeWithFont(font, constrainedToSize:CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
}
func stringSizeWithFont(_ font: UIFont, constrainedToSize size: CGSize) -> CGSize {
let boundingRect = (self as NSString).boundingRect(
with: size,
options: .usesLineFragmentOrigin,
attributes: [NSAttributedStringKey.font : font],
context: nil)
return CGSize(width: ceil(boundingRect.size.width), height: ceil(boundingRect.size.height))
}
}