针对Swift:让人眼前一亮的初始化方式和swiftinit方法这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展AcerSwift3笔记本怎么样AcerSwift3笔记本上手图赏、Chris
针对Swift:让人眼前一亮的初始化方式和swift init方法这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Acer Swift 3笔记本怎么样 Acer Swift 3笔记本上手图赏、Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望、Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数、ios – Swift 3发布后,Swift 2应用程序是否可以运行?等相关知识,希望可以帮助到你。
本文目录一览:- Swift:让人眼前一亮的初始化方式(swift init方法)
- Acer Swift 3笔记本怎么样 Acer Swift 3笔记本上手图赏
- Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望
- Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数
- ios – Swift 3发布后,Swift 2应用程序是否可以运行?
Swift:让人眼前一亮的初始化方式(swift init方法)
有条传播得很广的 tweet 讲到用位置参数(positional references)来初始化 Swift 常量:
原始代码见这个 gist(译注:原 gist 代码缩进太乱,搬运过来整理如下):
import UIKit
import XCPlayground
class ViewController: UIViewController {
func action() { print("Bing!") }
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .whiteColor()
let mySwitch : UISwitch = {
view.addSubview($0)
CenterViewInSuperview($0, horizontal: true, vertical: true)
$0.addTarget(self, action: "action", forControlEvents: .TouchUpInside)
return $0
}(UISwitch())
let _ : UILabel = {
view.addSubview($0)
CenterViewInSuperview($0, horizontal: true, vertical: false)
$0.text = "Toggle me"
$0.font = UIFont.boldSystemFontOfSize(36)
ConstrainViews("V:[view1]-30-[view2]", views: $0, mySwitch)
return $0
}(UILabel())
}
}
ViewController()
XCPlaygroundPage.currentPage.liveView = ViewController()
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
由于这条 tweet 太简短,而且没有像我预期的那样运作,这让我很困惑。因此我想在这儿写一篇关于这个问题更详细的文章。
问题
声明常量后,在一个紧接着的闭包中进行初始化,而不是之后在 viewDidLoad
或其他类似的方法中进行设置,这在 Swift 中是很常见的写法(也确实是一种不错的写法!)。
let purpleView: UIView = {
// 在此初始化 view
// 直接叫 "view" 真的好吗?
let view = UIView()
view.backgroundColor = .purpleColor()
return view
}()
我总是觉得在闭包中多命名一个 UIView
很难看(译注:注意看上面代码中原作者的注释),上面代码中有 purpleView
和 view
两个 UIView
实例,那么 view
是不是应该命名成 purpleView
?我至今还没找到关于这种命名问题的好办法。
解决方案
当我看到 tweet 中用 $0
而不是很繁琐地命名变量时感到很兴奋,我立马尝试了一下:
// 声明:以下代码无法运行
let yellowView: UIView = {
$0.backgroundColor = .yellowColor()
return $0
}()
但这没法运行...再仔细查看 @ericasadun 的代码,我意识到必须在闭包执行时,传入一个初始化好的 UIView
实例:
let yellowView: UIView = {
$0.backgroundColor = .yellowColor()
return $0
// 确保下一行的括号内要传入 UIView()
}(UIView())
当然这一次就能运行了!
结论
我确实很喜欢在这里用 $0
的写法,而不是显式地再命名一个变量。为啥我没想到这种方法呢,好气哦。然而现在我知道必须传入一个初始化好的 UIView()
,这从逻辑上的确说得通。大概我以后都会用这种写法。在这里用 $0
这么优雅的写法,为啥不呢!
加入我们 9 月 1 ~ 2 日在纽约市举办的 Swift 社区庆祝会?`(Swift Community Celebration)吧,用这个优惠码 NATASHATHEROBOT 减 $100!
更新
@khanlou 指出有个叫 Then 的库更赞,能够写出可读性更好的代码:
let label = UILabel().then {
$0.textAlignment = .Center
$0.textColor = .blackColor()
$0.text = "Hello, World!"
}
但我并不是很乐意把这个库导入到我的项目中,@khanlou 再次指出这个库只有 15 行代码,于是我的最终想法是把这 15 行代码复制到我的项目中!(译注:既然只有 15 行代码,下面搬运过来方便阅读)
import Foundation
public protocol Then {}
extension Then where Self: Any {
/// Makes it available to set properties with closures just after initializing.
///
/// let label = UILabel().then {
/// $0.textAlignment = .Center
/// $0.textColor = UIColor.blackColor()
/// $0.text = "Hello, World!"
/// }
public func then(@noescape block: inout Self -> Void) -> Self {
var copy = self
block(©)
return copy
}
}
extension Then where Self: AnyObject {
/// Makes it available to set properties with closures just after initializing.
///
/// let label = UILabel().then {
/// $0.textAlignment = .Center
/// $0.textColor = UIColor.blackColor()
/// $0.text = "Hello, World!"
/// }
public func then(@noescape block: Self -> Void) -> Self {
block(self)
return self
}
}
extension NSObject: Then {}
你也可以看看 @ericasadun 这个不错的解决方案!(译注:即这个 gist,代码搬运如下)
// @discardableResult to be added
// @noescape needs to move to type annotation
// needs to add _ for item
public func with<T>(item: T, @noescape update: (inout T) throws -> Void) rethrows -> T {
var this = item; try update(&this); return this
}
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。
Acer Swift 3笔记本怎么样 Acer Swift 3笔记本上手图赏
Acer Swift 3是宏碁推出的笔记本电脑,具有轻薄时尚等元素,这里为大家带来 Acer Swift 3笔记本上手图赏 ,一起来看看。
14英寸1920*1080的显示屏幕、2.5GHz的英特尔酷睿酷睿i3、i5-7200u/i7处理器、图形128mb英特尔高清显卡620、8GB/256GB的SSD、Windows Hello、指纹识别器,处理速度快可媲美MacBook,售价仅为1398美元(约£1090/1760美元),性价比方面还是不错的。
以上就是 Acer Swift 3笔记本上手图赏 相关内容,希望对你有帮助。
Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望
总结
以上是小编为你收集整理的Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数
总结
以上是小编为你收集整理的Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
ios – Swift 3发布后,Swift 2应用程序是否可以运行?
解决方法
>当Swift 3推出时,您的应用程序是否会在新操作系统上执行?
>推出时,您的应用会在新操作系统上运行吗?
关于第一个问题,是的,你的应用程序将执行,即使它是针对Swift 2编译的.Swift应用程序在其捆绑包中嵌入了Swift运行时库,因此您在这方面是安全的.您会注意到Swift捆绑包总是比Objective-C对应物大4-5 MB,这正是原因所在.
关于第二个问题,与任何新的操作系统版本一样,无法保证您的应用程序能够像以前版本的操作系统那样工作.虽然根据我的经验,Apple在过去的几个OS版本中做了相当不错的工作,尽管你的里程可能会有所不同.
今天关于Swift:让人眼前一亮的初始化方式和swift init方法的分享就到这里,希望大家有所收获,若想了解更多关于Acer Swift 3笔记本怎么样 Acer Swift 3笔记本上手图赏、Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望、Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数、ios – Swift 3发布后,Swift 2应用程序是否可以运行?等相关知识,可以在本站进行查询。
本文标签: