First version
This commit is contained in:
12
WebsiteGenerator/Extensions/Optional+Extensions.swift
Normal file
12
WebsiteGenerator/Extensions/Optional+Extensions.swift
Normal file
@@ -0,0 +1,12 @@
|
||||
import Foundation
|
||||
import Metal
|
||||
|
||||
extension Optional {
|
||||
|
||||
func unwrapped<T>(_ closure: (Wrapped) -> T) -> T? {
|
||||
if case let .some(value) = self {
|
||||
return closure(value)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
39
WebsiteGenerator/Extensions/String+Extensions.swift
Normal file
39
WebsiteGenerator/Extensions/String+Extensions.swift
Normal file
@@ -0,0 +1,39 @@
|
||||
import Foundation
|
||||
|
||||
extension String {
|
||||
|
||||
var nonEmpty: String? {
|
||||
self.isEmpty ? nil : self
|
||||
}
|
||||
|
||||
var trimmed: String {
|
||||
trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
}
|
||||
|
||||
func indented(by indentation: String) -> String {
|
||||
components(separatedBy: "\n").joined(separator: "\n" + indentation)
|
||||
}
|
||||
|
||||
var withoutEmptyLines: String {
|
||||
components(separatedBy: "\n")
|
||||
.filter { !$0.trimmed.isEmpty }
|
||||
.joined(separator: "\n")
|
||||
}
|
||||
|
||||
func dropAfterLast(_ separator: String) -> String {
|
||||
components(separatedBy: separator).dropLast().joined(separator: separator)
|
||||
}
|
||||
|
||||
func dropBeforeFirst(_ separator: String) -> String {
|
||||
components(separatedBy: separator).dropFirst().joined(separator: separator)
|
||||
}
|
||||
|
||||
func lastComponentAfter(_ separator: String) -> String {
|
||||
components(separatedBy: separator).last!
|
||||
}
|
||||
|
||||
func insert(_ content: String, beforeLast separator: String) -> String {
|
||||
let parts = components(separatedBy: separator)
|
||||
return parts.dropLast().joined(separator: separator) + content + separator + parts.last!
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user