学习Swift,我为啥子学习Swift,因为我有苹果电脑啊,哇哈哈哈哈;
开玩笑的,不过有苹果电脑对学习iOS开发真的挺重要的。可能苹果生态里面这两个也是父类跟子类的关系吧。
Swift学习一开始接触的是语法,然后是基本的开发控件,我先讲这两个,剩下的,路很长,共勉。(哈哈哈,这是朱老大经常跟我讲的,以后再说吧)
语法的内容我就不多说了,其实很多,但是也没那么多。接下来我就放一个基本的语法的链接,这些是我从一个软件上整理下来的,挺实用。
链接:https://pan.baidu.com/s/1RbrVzb7JhbaM-rSasY8a2w 密码:o4vt
(pages的哦,这个只是参考的学习资料)
接下来上代码:
//
// ViewController.swift
// 002-第一个应用程序
//
// Created by 曹杰 on 2018/5/16.
// Copyright © 2018年 曹杰. All rights reserved.
//
import UIKit
/*
1:OC [[UIView alloc] initWithFrame:xxx]
Swift UIView(XXX:)
类名() == alloc/init 等价
2.类方法 OC [UIColor redColor]
Swift UIColor.red
3:访问当前对象的属性,可以不使用‘self’
建议:都不用,在编译器提示的时候再添加,会对‘语境’有更好的体会
原因:闭包(提前准备好的代码,在需要的时候执行):(类似于 OC block),需要使用 self.
4:没有分号;
“;”目的分割语句的,在Swift中,默认不需要
5:枚举类型、
OC UIButtonTypeContactAdd
Swift '.'contactAdd
6:监听方法
OC @selector
Swift #selector 如果带参数,不需要使用“:”
2.0
7:调试
OC NSLog
Swift print
-没有时间
-效率比NSLog要高
跟踪函数的时候
OC __FUNCTION__
Swift #function
*/
classViewController:UIViewController{
///从Xcode 8.0 开始,目前所有的插件都无法工作!
///option + cmd + /增加文档注释
overridefuncviewDidLoad() {
super.viewDidLoad()
//预编译指令
//MARK:- 视图生命周期
//MARK:- 视图加载完成
//1.创建试图
let v =UIView(frame:CGRect( x:0,y:20,width:100,height:100))
//设置背景颜色
//color+ 回车
v.backgroundColor= colorLiteral(red: 1, green: 0.0581554151, blue: 0, alpha: 1) //TODO: 设置新的颜色
letiv =UIImageView(image: imageLiteral(resourceName: "1吉他大道")) //FIXME: 应该更改头像
iv.center = view.center
view.addSubview(iv)
//添加到当前视图
view.addSubview(v)
//2.创建一个按钮
letbtn =UIButton(type: .contactAdd)
v.addSubview(btn)
btn.addTarget(self, action:#selector(clickMe), for: .touchUpInside)
//MARK: 变量
demo()
demo1()
//关于var和let的选择
//不可变的会更安全,开发的时候,通常会先使用let,在需要变化的时候,再改成var
/// Variable 'x' was never mutated; consider changing to 'let' constant
//变量X从来没有被修改,建议改成‘let’
varx=120
lety =10
print(x + y)
v.backgroundColor = UIColor.red
demo3()
demo5201()
demo5203(x:nil, y:nil)
DEMO5204()
}
//007
//最常见的一个错误
//Unexpectedly found nil while unwrapping an Optional value
//在解包时发现nil值
/**
定义 可选项使用?
解包使用 ! ,准备计算
*/
funcdemo3() {
//1:原始的可选项定义
//none:没有值,或者some 某一类型
letx:Optional =10
//2:简单的定义
//'?'用来定义Y是一个可选的int类型,可能没有值,也可能有一个整数
lety:Int? =40// nil //= 20
//输出结果Optional(10),提示这是个可选值
print(x)
//Constant 'y' used before being initialized
//常量y在使用之前必须初始化
print(y)
//不同类型直接的值不能直接运算!如果没有值是nil不是任何数据类型,不能参与计算
//2>‘!’ 强行解包 - 可从可选中强行获取对应的非控值
//程序员必须为每一个惊叹号负责
//程序中少用!
print(x!+y!)
//常量Y在使用之前必须初始化
}
funcdemo4() {
//1>定义y,没有初始化
//2》给常量设置树脂,初始化的工作能做一次,再次修改常量会报错
lety:Int?
y =10
//*** var 的可选项默认为nil
//*** let 的可选值没有默认值
varx:Int?
x =10
x =100
print(x)
}
funcdemo2() {
//如果需要指定变量/常量的类型,也可以直接使用let x:类型 = 值
//提示:在Swift开发中,极少使用直接指定类型,通常都是自动推导!
letx:Double=10
lety =100.5
print(x+y)
}
//MARK: Demo1
//定义变量var
//常量 let ,定义之后,不能修改
//2.自动推导,变量/常量的类型会根据右侧的代码执行结果,推导对应的类型
//热键:option + click
//3.在Swift中对类型要求异常严格
//***任何不同的类型的数据之间都不允许直接运算
//不会做默认的隐式转换,所有的类型确定都要由程序员负责!
//在Swift中,不存在基本数据类型,都是结构体!
funcdemo1() {
letx =10
lety =10.5
//将Y转化成整数
//OC 中的写法(int)y ==>类型强转
//Swift 中Int()'结构体'的构造函数
print(x+Int(y))
print(Double(x) + y)
}
funcdemo() {
//定义变量var
//常量 let ,定义之后,不能修改
//2.自动推导,变量/常量的类型会根据右侧的代码执行结果,推导对应的类型
//热键:option + click
//整数:Int
varx=10
//小数:Double 精度高(OC 中 CGFloat)
lety =10.5
print(x , y)
}
//MARK: 5.20 简单的分支和三目的写法
funcdemo520() {
letx =10
/**
1:条件不需要()
2:语句必须有{}
-很多公司的代码规范中,禁止不使用{}
*/
ifx>5{
print("大了")
}else{
//will never be executed
//永远不会被执行 - 编译器变异的时候,会做语法检查
print("xiaole")
}
}
funcdemo5201() {
letx =10
x>5?print("大了") :print("小了")
//分享,有印象就行
//只执行前面的
x>5?print("大了") : ()
}
//MARK: - ??
/**??是一个简单的三目
- 如果没有值,使用值
- 如果没有值,就是用 ?? 后面的值代替
*/
funcdemo5203(x:Int?,y:Int?) {
print((x ??0)+(y ??0))
letname:String? ="老王"
print((name ??"") +"你好")
// print("\(name)你好")
//??操作符的优先级低,在使用的时候,记得加上小括号
print(name ??""+"nihao")
}
//MARK: if let \ var
funcDEMO5204() {
letoName:String? ="老王"
letoAge:Int? =10
ifoName !=nil&& oAge !=nil{
print(oName! +String(oAge!) )
}
}
funcdemo5202(x:Int?,y:Int?) {
// let x: Int? = 10
// let y: Int? = 200
ifx !=nil&& y !=nil{
print(x! + y!)
}else{
print("x huozhe y wei nil")
}
//强行解包有风险
}
@objcfuncclickMe(btn:UIButton) -> () {
print(#function)//#function跟踪函数
print("哈哈哈哈")
}
overridefuncdidReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这次先突出几个学习的知识点:
1://MARK:
很好用的一个标记符,因为开发的内容他不会是一个整体,所以你可以通过他来区分开不同的模块,并且在如图的部位看到并选择相应的模块位置。
2:对比一下OC和Swift的一些常用代码的区别:
1:OC [[UIView alloc] initWithFrame:xxx]
Swift UIView(XXX:)
类名() == alloc/init 等价
2.类方法 OC [UIColor redColor]
Swift UIColor.red
3:访问当前对象的属性,可以不使用‘self’
建议:都不用,在编译器提示的时候再添加,会对‘语境’有更好的体会
原因:闭包(提前准备好的代码,在需要的时候执行):(类似于 OC block),需要使用 self.
4:没有分号;
“;”目的分割语句的,在Swift中,默认不需要
5:枚举类型、
OC UIButtonTypeContactAdd
Swift '.'contactAdd
6:监听方法
OC @selector
Swift #selector 如果带参数,不需要使用“:”
2.0
7:调试
OC NSLog
Swift print
-没有时间
-效率比NSLog要高
跟踪函数的时候
OC __FUNCTION__
Swift #function
这些我在代码的开头也写了,Swift相对于很多语言来讲,是一个亲密度很高的语言,我们可以在Swift上找到很多像Objective-C,Java,C++之类语言的影子;当然,通过对比联想学习,你会学的更快;
3:?? 一个简单的三目
- 如果没有值,使用值
- 如果没有值,就是用 ?? 后面的值代替
funcdemo5203(x:Int?,y:Int?) {
print((x ??0)+(y ??0))
letname:String? ="老王"
print((name ??"") +"你好")
// print("\(name)你好")
//??操作符的优先级低,在使用的时候,记得加上小括号
print(name ??""+"nihao")
}
OK,今天就讲这些知识点,其实的话,一开始学习一门语言,对于代码一定要多码,当然,更重要的是有效代码,我们程序员不就是为了提高世界的运行效率而码代码的嘛
关于新的语言学习的话,代码自己码的代码要常回头看看,嗯~,我码的代码真好看(其实吧,你码的代码,嗯,我就不打击你了,哈哈哈),开个玩笑;
像我这么自恋的人,一般会把代码打印出来,细细品味,谁让我有打印机呢~
一张一张积累,也是让你对自己走过的路,学过的东西有一个数,不然的话,满电脑屏幕的代码,你会晕的哦。更何况,对于初学者来讲的话,其实你一天我感觉不会太多,谁让你是初学者呢
今天就先到这边了。