范围 2.1.1

范围 2.1.1

Kim Heebeom维护。



范围 2.1.1

  • Kim Heebeom

Scope

Swift Platform CocoaPods Swift Package Manager compatible Build Status codecov License

Swift风格的Scoping函数用于提高代码可读性

🌷用法

applyalsoletwithrun

返回值

Scope函数之间的区别在于它们返回的结果

  • applyalso返回上下文对象。
  • letwithrun返回闭包结果。

alsoapply的返回值是上下文对象本身,因此它们可以作为中间步骤包含在调用链中。

let org = Organization()
  .also { print("new podo org") }
  .apply {
    $0.name = "podo"
    $0.member = Member(name: "jayce", role: .owner)
  }

它们还可以用于返回上下文对象的功能的返回语句中。

func newPodoOrg() -> Organization {
  Organization().apply {
    $0.name = "podo"
    $0.member = Member(name: "jayce", role: .owner)
  }
}

apply

对于不返回值且主要操作接收者对象成员的代码块,请使用apply

let org = Organization().apply {
  $0.name = "podo"
  $0.member = Member(name: "jayce", role: .owner)
}
print(org)

also

对于不改变对象的其他操作,例如记录或打印调试信息,请使用also

let member = Member(name: "jayce", role: .owner)
let org = Organization()

org.also { print("new member") }
  .addMember(member)

let

let可以用来对调用链的结果调用一个或多个函数。

let numbers = [1, 5, 10]
numbers.map { $0 * 2 }
  .filter { $0 > 3}
  .let { $0.count }

let通常用于仅在有非nil值时执行代码块。

var org: Organization?
org = Organization(name: "podo", member: Member(name: "jayce", role: .member))

org?.member?.let {
  $0.role = .owner // $0 is not nil inside '?.let {}' 
}

with

非扩展功能:将上下文对象作为参数传递,返回值是闭包的结果。

with可以被理解为"使用此对象,执行以下操作。"。

let description = with(org) {
  "Orgnaization name is \($0.name), "
    .appending("member name is \($0.member.name)")
}
print(description)

run

使用run作为非扩展功能。非扩展的run允许你在需要表达式的地方执行多个语句的代码块。

let hexNumberRegex = run { () -> Regex in
  let digits = "0-9"
  let hexDigits = "A-Fa-f"
  let sign = "+-"

  return Regex("[\(sign)]?[\(digits)\(hexDigits)]+")
}

⚙️安装

  • 使用 Swift Package Manager

    import PackageDescription
    
    let package = Package(
      name: "MyApp",
      dependencies: [
        .package(url: "https://github.com/hb1love/Scope", .upToNextMajor(from: "2.1.0"))
      ]
    )
  • 使用 CocoaPods

    pod 'Scope'

👮‍ 许可证

范围可使用MIT许可证获得。有关详细信息,请参阅LICENSE