Swift的100天-整合IV
我完全同意Paul的观点:100天的时间差不多快到一半了,困难在增加,是的,每天我们都需要更多的时间。 我很真诚,这是第42天的结束,我现在开始面对第41天。我很确定我会超越第100天完成任务,因为我真的很难每天有一个完全免费的时间来集中精力在此基础上,加上写作,我学会了不迷路。 让我们看看进展如何!
我们学到了什么?
很多东西!
现在我的主要奋斗是:我什么时候应该使用什么? 也就是说,何时使用Data(contentsOf:)
何时从磁盘加载内容,何时使用FileManager
进行Bundle
……我想只有经验能证明这一点。
我们了解了标签栏控制器,并且其中的每个项目都由标题和图标表示,我们使用Data
加载了URL
,因此解析了JSON
。
我们设法使WKWebView
生锈,无法以表格视图显示Web上的某些内容 ,让我们看了一眼HTML的世界(不是我喜欢的!),并学会了如何在代码中设计接口。
我们向我们的武器库添加了属性观察器 ,以及如何在设备上对多线程工作流进行编程。
还有更多……
重要要点
enumerated()
当我们要遍历数组并不仅使用其元素而且使用它们的索引时,可以在数组本身上使用enumerated()
方法。 让我们看一下该方法的描述:
让我们看一下返回类型是什么: EnumeratedSequence
。 在文档中,此类型嵌套在“ 集合”>“支持类型”内 ,并被描述为序列或集合的元素的枚举 。 要在数组上调用此函数,我们必须使用一个元组 ,无论如何返回的都是String 。 从文档中查看以下示例:
var s = ["foo", "bar"].enumerated()
for (n, x) in s {
print("\(n): \(x)")
}
// Prints "0: foo"
// Prints "1: bar"
物业观察员
这些巧妙的代码段使我们可以在属性更改时运行一些代码。 我们可以将它们视为代码传感器 。 当然它们不是万能的,但是它们肯定有用,在Project 8中,我们以这种方式使用它们:
var score: Int = 0 {
didSet {
scoreLabel.text = "Score: \(score)"
}
}
大中央派遣
为了利用设备硬件的功能,我们需要编写巧妙的软件,以利用其多任务处理功能。 这可以通过访问Grand Central Dispatch (对我来说是全球冷却,否则我永远不会记住!)来完成,这使我们能够在后台执行长时间而缓慢的活动,并在后台执行重要的操作(以及UI更新!!! )。主线程。
代码如下所示:
DispatchQueue.global().async { [weak self] in
// do background work
DispatchQueue.main.async {
// do main thread work
}
}
挑战
精细! 这次,我们必须自己制作一个man子手游戏…… 让我们开始吧,看看我们能到达哪里!
在经历了20分钟的黑屏危机之后,我拿了一张纸,在那儿画了我的界面,这样我就能看到我需要的东西了……
我计划在顶部放置一个大标签,以显示有关玩家表现的报告 ,以及最重要的是,他仍然可以犯多少错误。
在我的正下方,我将放置一个“ NEW GAME”和一个“ RETRY”按钮(也许还有一个SCORE按钮,用于与正确和错误的答案相处,但是一次,好吗?)
在其下方,我需要“当前答案”文本字段,然后在其下方,一个标签和两个按钮:一个标签将显示“选择的字母”,两个按钮用于“确认”选择,另一个按钮“清除”并选择另一封信。
现在,最糟糕的是……我必须组织下面的字母按钮,但是如果我使用26个字母的英语字母,我将无法使用嵌套循环来绘制它……该怎么做?
小小的评论……我们怎能期望我们在一小时或更短的时间内就能做到这一点,我不知道……我能说什么? 我会在今天的进展中落后…
计划需要什么…
我开始写一些我认为可能需要的属性…
var reportLabel: UILabel!
var scoreLabel: UILabel!
var nextLevel: UIButton!
var retry: UIButton!
var currentAnswer: UITextField!
var chosenLetter: UILabel!
var submitButton: UIButton!
var clearButton: UIButton!
var letterButtons = [UIButton]()
var activatedButtons = [UIButton]()
var attemptsLeft = 0
var score = 0
当然,这个清单很可能会在不久的将来发生变化,但现在看来已经很安全了。 现在,开始设计UI。
UI设计
我设法设计了整个UI,并且开始看起来不错,刚才Xcode拒绝“在合理的时间内编译” NSLayoutConstraint.activate
的实例…因此,即使编写了整个实例,现在我也完全停留在这里。很有道理…
也许我只是去尝试编写逻辑。