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的实例…因此,即使编写了整个实例,现在我也完全停留在这里。很有道理…

也许我只是去尝试编写逻辑。