当前位置: 首页 > 软件库 > iOS代码库 > 其他(Others) >

Swift Then

Swift 初始化语法糖
授权协议 MIT
开发语言 Swift
所属分类 iOS代码库、 其他(Others)
软件类型 开源软件
地区 不详
投 递 者 严朝明
操作系统 iOS
开源组织
适用人群 未知
 软件概览

Then 是实现 Swift 对象初始化的一个语法糖

初始化 UILabel 并设置其属性

let label = UILabel().then {
  $0.textAlignment = .center
  $0.textColor = .black
  $0.text = "Hello, World!"
}

相当于:

let label: UILabel = {
  let label = UILabel()
  label.textAlignment = .center
  label.textColor = .black
  label.text = "Hello, World!"
  return label
}()

技巧

  • 在所有的 NSObject 子类中使用 then() 

    let queue = OperationQueue().then {
      $0.maxConcurrentOperationCount = 1
    }
  • 在自定义类中使用,只需进行简单扩展:

    extension MyType: Then {}
    
    let instance = MyType().then {
      $0.really = "awesome!"
    }
  • 拷贝值类型数据时候 with() 

    let newFrame = oldFrame.with {
      $0.size.width = 200
      $0.size.height = 100
    }
    newFrame.width // 200
    newFrame.height // 100
  • 使用 do() 减少类型处理

    UserDefaults.standard.do {
      $0.set("devxoul", forKey: "username")
      $0.set("devxoul@gmail.com", forKey: "email")
      $0.synchronize()
    }

真实示例:

final class MyViewController: UIViewController {

  let titleLabel = UILabel().then {
    $0.textColor = .black
    $0.textAlignment = .center
  }

  let tableView = UITableView().then {
    $0.backgroundColor = .clear
    $0.separatorStyle = .none
    $0.register(MyCell.self, forCellReuseIdentifier: "myCell")
  }

  override func viewDidLoad() {
    super.viewDidLoad()
    self.view.addSubview(self.titleLabel)
    self.view.addSubview(self.tableView)
  }

}

安装

  • For iOS 8+ projects with CocoaPods:

    pod 'Then'
  • For iOS 8+ projects with Carthage:

    github "devxoul/Then"
    
  • Using Swift Package Manager:

    import PackageDescription
    
    let package = Package(
      name: "MyAwesomeApp",
      dependencies: [
        .Package(url: "https://github.com/devxoul/Then", majorVersion: 2),
      ]
    )
  • then是一个swift初始化库,只有80几行的代码库,确可以让初始化变得很优雅。 1.使用then初始化AnyObject,这里以初始化控件为例 lazy var label = UILabel().then({ $0.text = "label" $0.textColor = .blue })   let redView = UIView().then

  • Then 是一个 Swift 初始化器的语法糖,简化了初始化(或者修改属性)的代码量。 Then 框架非常简单,代码量在 60 行左右。 Then 框架对 NSObject 扩展了 then() 方法。下面是官方提供的一个示例: let label = UILabel().then { $0.textAlignment = .center $0.textColor = .black

  • 方法是执行特殊任务的自包含代码块。你可以给方法名字来表示它的功能,而且在需要的时候调用这个名字的方法来执行它的任务。   Swift方法的语法表达很灵活,从类似c的没有参数名的方法到oc复杂的带有名字和参数的方法。参数在简单方法的调用中可以提供默认的初始值,也可以传入一个变量的参数,当方法执行完后可以修改这个参数。   每个方法在Swift中都有一个类型,其中包括参数类型和返回类型。你可以享其他任

  • 方法❶ 使用NSEvent.addLocalMonitorForEvents(matching: [.keyDown]) 不细述 方法❷ Using some additional convenience sugar methods, I can just write like this: .commands { CommandMenu("Input") { keyInpu

  • 这个博客写了一些swift常用的库,可以一看 https://www.jianshu.com/p/6cc1e21df6ac 转载于:https://www.cnblogs.com/-WML-/p/9112695.html

  • 本文翻译自:How to use background thread in swift? How to use threading in swift? 如何在swift中使用线程? dispatchOnMainThread:^{ NSLog(@"Block Executed On %s", dispatch_queue_get_label(dispatch_get_current_que

 相关资料
  • 按照对象的类型以及初始化时的上下文,C++提供了五花八门的对象初始化的方式。若不慎误用,可能会产生匪夷所思的谬误,而且还伴随着莫名其妙的错误(调试)信息。考虑如下的代码: string a[] = { “foo”, ” bar” }; //正确:初始化数组变量 //错误:初始化列表应用在了非聚合的向量上 vector<string> v = { “foo”, ” bar” }; void f(s

  • 初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer,例如: model.add(Dense(64, kernel_initializer='random_uniform', bias

  • 初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是init,例如: model.add(Dense(64, init='uniform')) 预定义初始化方法 uniform lecun_uniform: 即有输入节点数之平方根放缩后的均匀分布初始化(LeCun 98). normal identity:仅用于权值矩

  • 我有一个使用MIP SDK的Azure函数,当调用< code>MIP时,我得到以下错误。CreateMipContext(...): 令人惊讶的是,该错误仅在 Azure 上运行时发生。在本地运行时,一切都很好。 我正在使用MIP SDK v1.8.86和.NET Core 3.1。 知道OneDS是什么或者是什么导致了错误吗?

  • 新CONF:我做了一些改变来配合你所说的。现在我删除了hibernate-cfg.xml并在spring-servlet.xml中做了所有的conf: 它可能来自我的java文件吗? 错误是: Bean 类 [org.springframework.orm.hibernate4.LocalSessionFactoryBean] 的属性 'transaction' 无效:Bean 属性 'trans

  • Initialization 初始化 Although it doesn’t look superficially very different from initialization in C or C++, initialization in Go is more powerful. Complex structures can be built during initialization a

  • 初始化是为类、结构体或者枚举准备实例的过程。这个过需要给实例里的每一个存储属性设置一个初始值并且在新实例可以使用之前执行任何其他所必须的配置或初始化。 你通过定义初始化器来实现这个初始化过程,它更像是一个用来创建特定类型新实例的特殊的方法。不同于 Objective-C 的初始化器,Swift 初始化器不返回值。这些初始化器主要的角色就是确保在第一次使用之前某类型的新实例能够正确初始化。 类类型的

  • new iSlider(DOM, DATA, OPTIONS) Name Type Description DOM dom 容器dom节点 DATA Array 数据列表 OPTIONS Object 配置项 DOM new iSlider(DOM, DATA, OPTIONS); {HTMLElement} 容器dom节点 作为第一个参数并不是必须的,会被OPTIONS.dom覆盖,但是这十分必