Swift学习笔记(一)

swift学习笔记(一)

  • 一、一些基本的东西
    • 1. VStack/HStack、Button
    • 2. 声明:@State @Binding @ObservedObject
  • 二、做实习中遇到的认为需要被记录的东西
    • 1. 绑定在view上的alert弹窗
    • 2. 绑定在button上的alert弹窗
  • 三、最后想说的话

最后一学期的实习,在一个公司里面做两个手机APP,要用到的语言是swift,以前没有学过,现学,所以把一些要记录的东西记录下来。

一、一些基本的东西

swift的后端的东西其实跟别的语言差别不是太大,几种基本的数据类型,if、while、for、do-while等和其他的都基本一样。唯一比较特别的应该是swift规定了方法的输入数据类型和方法的返回数据类型。(我写的时候突然想起,JAVA其实也规定了的啊。)

前端的话,我们用的是比较新的swift5里面的swiftUI(其实挺讨厌用最新的东西的,意味着没有以往的例子作为参考,同时还有各种莫名其妙的bug)。

swiftUI相对前面swift3里面的UIController差别还真是挺大的。好多东西都要自己找,swift的API写的也不是太好,所以这一块对我来说真的是一个挑战(发布视频里面说的可以很轻易的从UIController变换到swiftUI,我想说才怪咧。就像他们一直都说swift超简单的,我写swiftUI这块的时候想用头撞墙,很多方法找不到documentation,纯考自己猜的)。

1. VStack/HStack、Button

前者是垂直stack,后者水平stack,基本是Drag and put就可以的。不过我以后可能就记不住了,还是把基本代码写在这里。
复制一段自己的代码:

VStack(alignment: .center) {
           Spacer()
            
            HStack(alignment: .firstTextBaseline) {
                VStack(alignment: .center, spacing: 8) {
                    Text("Powdery Mildew: Temperature: 15ºC - 20ºC, humidity: 85% - 100%")
                        .font(.headline)
                    Text("Aphid: Temperature: 24ºC - 27ºC, heavy rain.")
                        .font(.headline)

                }
            }
            Spacer()
        }
        .frame(height: 90)

2. 声明:@State @Binding @ObservedObject

这是我有印象的几个用在swiftUI里面的声明。
@State声明一个可以被用在swiftUI(view)里面的变量。
@Binding声明紧随其后的变量的值来自于另外一个文件,它是通过传入的值来进行赋值。
@ObservedObject 这个是定义其后的变量需要随时监测它的值,一旦改变,本文件中的相应值随之改变。

@State用于View内部,@ObservedObject用于外部。例如数据存储在数据库中,我们就需要用@ObservedObject了。

我的程序中的例子是这样的:

    	@State var showingAlert: Bool = true
        @Binding var pestIsActive: Bool
        @ObservedObject var city: City

二、做实习中遇到的认为需要被记录的东西

前面那段时间有些东西忘记回忆了,现在这个阶段是做一个alert弹窗,有些东西记录下。

1. 绑定在view上的alert弹窗

(在一个view中)
首先定义一个bool变量。

    @State var showingAlert: Bool = true

然后把alert弹窗绑定到view上。

    var body: some View {
}
        .alert(isPresented: self.$showingAlert) {
            Alert(title: Text("Important message"),
            message: Text("Wear sunscreen"),
            dismissButton: .default(Text("Got it!"))
             )
        }

进入页面就会自动弹出弹窗。
本来是要有if条件判断什么时候弹出,什么时候不弹出。但是我们当时遇到了不知名error,写if条件的时候一直报错。
留待以后自己回头看的时候写个demo,看一下怎么用if来判断进入页面的时候是否需要显示这个弹窗。
!!!(此处有一个留待以后看的问题。)

2. 绑定在button上的alert弹窗

后来我们把这个模块变成了一个纯text的文本,用if condition来决定是否显示这整个模块。还是决定在其中添加一个按钮,所以按钮显示alert的代码如下:

struct ContentView: View {
    @State private var showingAlert = false

    var body: some View {
        Button(action: {
            self.showingAlert = true
        }) {
            Text("Show Alert")
        }
        .alert(isPresented: $showingAlert) {
            Alert(title: Text("Important message"), message: Text("Wear sunscreen"), dismissButton: .default(Text("Got it!")))
        }
    }
}

三、最后想说的话

总的来说,我感觉swift对我来说其实并不是那么讨喜,后端没什么明显的优点,前端没有太多文档可看也让人有点心力憔悴,框架还规定得很死板。(Python倒是挺不错的。Python天下无敌!。。虽然我是写JAVA的。)
不过可能是因为我在看苹果给出的各种文档这块和它有点不合拍,总觉得那些文档相当于没有,只在关键地方提一句,就像以前数学参考书里面那些“答案:1. 答案解析:略。”,好像觉得大家怎么可以不懂这么简单的问题。
着实傲慢得可以。
嘶,话说苹果的确有点傲慢啊。。。好多功能都是,我有,我做出来了,这些功能,你能找到就随便用,找不到,怪我咯?

你可能感兴趣的:(Swift)