-
var appVersionAndBuild: String { get }
let system = SystemInfo() //App version: 1.0.0 //Build number 1 system.appVersionAndBuild //"1001"
-
var appVersion: String { get }
let system = SystemInfo() //App version: 1.0.0 system.appVersion //"1.0.0"
-
var appBuild: String { get }
let system = SystemInfo() //App build: 1 system.appVersion //"1"
-
static func string(key: String, bundle: Bundle = .main) -> String
Localize.string(key: "home_title")
-
var isNotEmpty: Bool { get }
let array = [String]() array.isNotEmpty
-
subscript (safe index: Index) -> Element?
let array = ["John", "Mary"] array[safe: 0] // John array[safe: -1] // nil
-
func decoded<T: Decodable>(as type: T.Type, using decoder: JSONDecoder = .defaultDecoder()) throws -> T
struct People: Decodable { ... } let data = Data() data.decoded(as: People.self)
默认格式选项
-
* "yyyy-MM-dd hh:mm:ss" * "yyyy-MM-dd" * "MMMM, yyyy" * "MM, yyyy"
-
func day(calendar: Calendar = .current) -> Int
// returns a number Date().day()
-
func toString(format: String = DateFormatType.serverShort.rawValue, dateFormatter: DateFormatter = .defaultFormatter()) -> String
Date().toString() //it uses: .serverShort
-
func toFormat(_ format: String = DateFormatType.serverShort.rawValue) -> Date?
//when we want to convert a date from Presentation to Infrastructure layer or vice versa Date().toFormat("yyyy")
-
func dayWihSuffix(calendar: Calendar = .current) -> String
"2024-03-05" .toDate() .dayWihSuffix() // returns: "5th"
这是重要用法,因为为了保持一致性,整个应用中应使用相同的格式化器。
-
static func defaultFormatter(dateFormat: String = DateFormatType.serverLong.rawValue) -> DateFormatter
DateFormatter.defaultFormatter()
-
func toData() -> Data?
let dict: [String: Any] = ["id": 1, "name": "John"] dict.toData()
-
struct People: Encodable { let id: Int }
-
func toData(encoder: JSONEncoder = .defaultEncoder()) -> Data?
let people = People(id: 1) people.toData()
-
func toJson(encoder: JSONEncoder = .defaultEncoder()) -> [String: Any]?
let people = People(id: 1) people.toJson() //["id": 1]
-
static func defaultDecoder(dateFormatter: DateFormatter = .defaultFormatter()) -> JSONDecoder
JSONDecoder.defaultDecoder()
-
static func defaultEncoder(dateFormatter: DateFormatter = .defaultFormatter()) -> JSONEncoder
JSONEncoder.defaultDecoder()
当我们在 TableViews 中注册单元格时,这是一个很好的选项。
-
let tableView = UITableView(...) tableView.register(PeopleTableViewCell.self, forCellReuseIdentifier: PeopleTableViewCell.className)
-
static var className: String { get }
var className: String { get }
final class PeopleTableViewCell: NSObject { ... } PeopleTableViewCell.className //or let cell = PeopleTableViewCell(...) cell.className
-
func asKind<T>(of: T.Type) -> T?
final class PeopleViewController: UIViewController { ... } let anyObject: NSObject = PeopleViewController() anyObject.asKind(of: UIViewController.self)
-
func removeCharacters(_ characters: [Character] = defaultCharactersToRemove) -> String
let word = "*4 . john" word.removeCharacters() //*4john //or word.removeCharacters([" ",".", "*", "4"]) //john
-
func onlyNumbers() -> String
"1b2c3d".onlyNumbers() //"123"
-
func toDate(format: String = DateFormatType.showShort.rawValue, dateFormatter: DateFormatter = .defaultFormatter()) -> Date?
-
第 1 选项
"March, 2024".toDate()
-
第 2 选项
let formatter = DateFormatter() formatter.dateFormat = "dd-MM-yyyy" "25-03-2024".toDate(dateFormatter: formatter) //succeed
-
-
convenience init?(hex: String)
let color = UIColor(hex: "#AABBCC") //succeed let color = UIColor(hex: "AABBCC") //succeed
-
static func custom(family: String, size: CGFloat, defaultFont: UIFont = defaultFont) -> UIFont
UIFont.custom(family: "font_name_on_info.plist", size: 12)
-
var isVisible: Bool { get set }
UIView().isVisible = true UIView().isHidden = true
-
func clipAsCircle() -> UIView
let view = UIView() view.clipAsCircle()
-
func cornerRadius(value: CGFloat) -> UIView
let view = UIView() view.cornerRadius(radius: 5.0)
-
func cornerRadius(radius: CGFloat, cornerMask: CACornerMask) -> UIView
let view = UIView() view.cornerRadius(radius: 5.0, cornerMask: [.layerMaxXMaxYCorner])
-
func configureBorder(color: UIColor = UIColor.lightGray, thickness: CGFloat = 0.5, cornerRadius: CGFloat = 0) -> UIView
let view = UIView() view.configureBorder()
-
func addShadow(color: UIColor = .black, opacity: Float = 0.2, shadowRadius: CGFloat = 2, offset: CGSize = .init(width: -0.05, height: 0.05), cornerRadius: CGFloat = 4) -> UIView
let view = UIView() view.addShadow()
-
func addGradient(colors: [UIColor], flow: ColorFlow = .leftRight) -> UIView
let view = UIView() view.addGradient(colors: [.red, .blue, .orange])
-
func centerInSuperview()
let view1 = UIView() let view2 = UIView() view1.addSubview(view2) view2.centerInSuperview()
-
func anchor(_ view: UIView, distance: CGFloat = 8)
let view1 = UIView() let view2 = UIView() view1.anchor(view2)