「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」
问题与解决
1.代码只要一修改,都要重新运行吗?
Storyborad项目不支持热更新,如果想体验热更新想过可以用SwiftUI,或者在项目当中看看加入Lookin,可以实时调整UI
2.playground运行原理?
源编辑器
3.不同类型值默认值是?
可选类型是nil
Swift不会自动给予默认值,在声明成员变量是要么给予他默认值,要么标记为可选类型,或者!(注意如果后面没给他赋值,调用时会crash),或者在类或者结构体创建的时候给予他默认值
4.swift和cocoa什么关系,类型桥接?
Xcode是用于开发Swift或Objective-C应用程序的IDE,可以使用Cocoa API(这是OS API和Mac OS X的标准库; Cocoa Touch在移动设备上是相同的)。
5.练习swift语法
在xcode新建,macos-commond line tool-语言选swift
6.ios生命周期
程序入口:appdelegate.swift,@main
界面入口?:viewcontroller里的viewdidload
协议:类似接口
7.后面的酒店管理系统我加了一个协议,大家可以到时候打一个断点debug一下,观察一下跨页面传值时整个程序的运行逻辑
8.跳进一个函数里,打开另一个文件,怎么回去?
进入一个函数里打开另外一个文件怎么回去,在iOS当中主要有三种方式,代理、回调、通知。
这里的代理指的就是通过代理模式的方式通过代理对象、委托者、协议三者实现(返回的类为委托者,跳过去的类为代理对象),协议(也就是接口)当中定义需要代理的方法(需要被代理的行为),委托者在当中调用协议方法,代理对象当中实现,这样就可以回去了。
回调主要通过闭包实现
还有一种方法是通知,他实现了跨类传输。使用通知是一种通过观察者模式在App全局进行广播(发送通知的类进行post操作),然后找到对应的接受者(接受类当中添加addObserve)。通知是一种一对多的消息传输方式(代理、回调都是一对一的),也就是发送方发送一个消息,接收方可以有多个。但是通知有个坏处,就是不好定位消息来源。
导航栏有个箭头可返回,具体快捷键自己查
9.if let a = b { // 这个为什么可以?
}
可选绑定,只用于b是一个可选值的情况,如果b有值,取出值给a,并进入条件语句
10.卸载并重装xcode:
#删除应用
sudo rm -rf /Applications/Xcode.app
sudo rm -rf /Library/Preferences/com.apple.dt.Xcode.plist
#删除用户目录相关文件
rm -rf ~/Library/Preferences/com.apple.dt.Xcode.plist
rm -rf ~/Library/Caches/com.apple.dt.Xcode
rm -rf ~/Library/Application\ Support/Xcode
#删除开发者相关的文件
rm -rf ~/Library/Developer/Xcode
rm -rf ~/Library/Developer/CoreSimulator
rm -rf ~/Library/Developer/XCPGDevices
打开appstore安装
xcode各个版本安装:developer.apple.com/download/al…
11.是不是错了
函数定义里没有显示声明的标签是什么?标签名称吗?
为什么会有参数标签?使用场景?
官方文档,使用的是参数标签
12.digitNames是可选类型?
13.xcode新建,没有多平台,macos下没有application
14.xcode卸载
#删除应用
sudo rm -rf /Applications/Xcode.app
sudo rm -rf /Library/Preferences/com.apple.dt.Xcode.plist
#删除用户目录相关文件
rm -rf ~/Library/Preferences/com.apple.dt.Xcode.plist
rm -rf ~/Library/Caches/com.apple.dt.Xcode
rm -rf ~/Library/Application\ Support/Xcode
#删除开发者相关的文件
rm -rf ~/Library/Developer/Xcode
rm -rf ~/Library/Developer/CoreSimulator
rm -rf ~/Library/Developer/XCPGDevices
15.练习swift
新建文件就是快捷键command+n
新建项目:command+shift+n
新建项目-macos- application-command line tool
16.本地只拉取了一部分远程库,之后怎么更新本地
丢弃本地,同步远程.
参考:developer.aliyun.com/article/658…
本地未提交:git checkout -- *
17.if和guard区别
// guard
var a: String? = "ddd" guard let b = a else { print("a is nil") }
print(b) //注意解包之后b的作用域仍然有效
//if
var a: String? = "ddd" if let b = a {
print(b) //解包之后b的只有在 { ... } 内才有作用域
}