Sugar 5.0.1

Sugar 5.0.1

测试已测试
Lang语言 SwiftSwift
许可 NOASSERTION
发布上次发布2020 年 6 月
SPM支持 SPM

Christoffer WinterkvistVadym MarkovHyper Interaktiv ASElvis NuñezSugar 维护。



Sugar 5.0.1

Sugar

Sugar 是一款用于您的 Cocoa 实现的糖分。

CI Status Version Carthage Compatible License Platform Swift

目录

Hue Icon

iOS

应用程序

let appName = Application.name             // CFBundleDisplayName : String
let appVersion = Application.version       // CFBundleShortVersionString : String
let appExecutable = Application.executable // CFBundleExecutable : String
let appBundle = Application.bundle         // CFBundleIdentifier : String
let appSchemes = Application.schemes       // CFBundleURLSchemes : [String]
let mainAppScheme = Application.mainScheme // CFBundleURLSchemes.first : String?

轻松获取主包信息。

屏幕

let pixelSize = Screen.pixelSize // CGSize(width: screenWidth * scale, height: screenHeight * scale)

获取设备屏幕的实际像素信息。

模拟器

if !Simulator.isRunning {
  // add device specific operations here
}

为开发者从模拟器中运行应用时,轻松排除操作,如不订阅推送通知或运行分析操作等。

键盘观察器

观察键盘显示和隐藏事件,并进行处理

let handler = BasicKeyboardHandler()
handler.show = { [weak self] height in
  // move text fields up
}

handler.hide = { [weak self] in
  // move text fields back to original position
}

keyboardObserver = KeyboardObserver(handler: handler)

目前支持

  • BasicKeyboardHandler:基本的UIView动画
  • InsetKeyboardHandler:animate UIScrollView缩进
  • ConstraintKeyboardHandler:animate底部布局约束
  • CustomKeyboardHandler:自定义处理

UIView

.optimize()
let view = UIView.optimize
/*
  clipsToBounds = true
  layer.drawsAsynchronously = true
  opaque = true
*/

UIImage

渲染模式
image.original // imageWithRenderingMode(.AlwaysOriginal)
image.template // imageWithRenderingMode(.AlwaysTemplate)

共享

序列类型

let first: Int? = items.findFirst({ $0 > 10 })

日期

比较

if date1 < date2 {
  // do something
} else if date1 >= date2 {
  // do something else
}

构建

let _ = 5.day
let _ = 3.week

框架

let view = UIView()
view.width = 200
view.height = 200
view.x = 25
view.y = 25

print(view.width) // prints 200
print(view.height) // prints 200
print(view.x) // prints 25
print(view.y) // prints 25

主中心调度

dispatch {
  // dispatch in main queue
}

dispatch(queue: .Background) {
  // dispatch in background queue
}

lazy var serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL)
dispatch(queue: .Custom(serialQueue)) {
  // dispatch in a serial queue
}

使用主中心调度轻松进行调度。支持所有常规全局队列:`Main`、`Interactive`、`Initiated`、`Utility`、`Background`。还有 `.Custom()` 供你自定义调度队列。

本地化

let string = localizedString("My Profile")
let formattedString = localizedString(key: "%d numbers", arguments: 10)

Swift 快速访问 (pun intended) 到 `NSLocalizedString`,我们保证将有更多的有效自动完成。

Once

let once = Once()
once.run {
  // do something
}

once.run {
  // no effect
}

运算符

var url = NSURL(string: "hyper.no")!
url ?= NSURL(string: "\\/http")
// url is equal to hyper.no

?=运算符仅在右侧非nil时分配值。

范围

let acceptable = 200..<300
if acceptable.contains(response.statusCode) {
  // Status code is between 200 and 299.
}

正则表达式

if "[email protected]".isEmail() {
  // Is email
}

let stringNumber = "1984"
if stringNumber.isNumber() {
  // Is a number
}

if stringNumber.matches("^[0-9]+$") {
  // Is a number
}

共享扩展

+队列

struct Object: Queueable {

  func process() -> Bool { return true }
}

let myQueue = [Object(), Object()]
myQueue.processQueue()

轻松创建自己的处理队列,只需让您的对象符合 Queueable

public protocol Queueable {
  func process() -> Bool
}

URLStringConvertible

let urlString = "https://hyper.no"
let url = urlString.url

高度启发或借鉴自 Alamofire实现

核心基础

let string = "hyper/oslo"
string.length // 10
string.truncate(5) // hyper...
string.split(/) // ["hyper", oslo]

if string.isPresent {
  // do something
}

if string.contains("hyper") {
  // found hyper
}

var dirtyString = "   hyper   "
print(dirtyString.trim()) // prints "hyper"

在 `String` 上添加了一些额外的糖层,用于获取长度、截断、修剪或分割字符串。

isPresentisEmpty 的反义词。

contains 可以用来检查字符串是否包含单词或短语。

Swizzler

class Swizzled: NSObject {

  override class func initialize() {
    struct Static {
      static var token: dispatch_once_t = 0
    }

    if self !== Swizzled.self {
    return
  }

  dispatch_once(&Static.token) {
    Swizzler.swizzle("method", cls: self)
  }
}

  dynamic func method() -> Bool {
    return true
  }

  func swizzled_method() -> Bool {
    return false
  }
}

let object = Swizzled()
object.method() // false

我们每天都在进行方法交换,这曾经很普通,现在是 Swiftling,也就是说,非常快。

Then

let UIView().then {
  $0.backgroundColor = UIColor.blackColor()
}

此实现由 @devxoul 通过他的出色 Then 仓库提供。

类型别名

public typealias JSONArray = [[String : AnyObject]]
public typealias JSONDictionary = [String : AnyObject]

UI测试

if UITesting.isRunning {
  // tests are running
} else {
  // everything is fine, move along
}

当运行UI测试时,轻松包含或排除操作。

单元测试

if UnitTesting.isRunning {
  // running test
}

func testPerformance() {
  let measurement = measure {
    // run operation
  }
}

检查是否正在运行单元测试并测量性能。

安装

Sugar 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod 'Sugar'

Sugar 同样通过 Carthage 提供。要安装,只需在 Cartfile 中写入

github "hyperoslo/Sugar"

Sugar 还通过 Swift 包管理器 提供。

.package(url: "https://github.com/hyperoslo/Sugar.git", .upToNextMajor(from: "5.0.1")),

作者

Hyper Interaktiv AS,[email protected]

许可协议

在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。