iOS学习问题与解决记录

136 阅读4分钟

「这是我参与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

见15

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的只有在 { ... } 内才有作用域 

}