IOS学习随笔
IOS ICON 制作网站
生成整套图标 https://appicon.co
swift驼峰法命名
- 变量:小驼峰法f命名
例:diceImageView
btnRoll
-
文件名:大驼峰法命名
全大写
变量申明
-
申明一个变量就是制造一个容器,将数据放进去
- 容器有两种形式:var 和 let
- var是变量,可变的
- let是常量,是不可变的
let耗内存小,var可变。
首先考虑用let,如果提示不能给常量重新赋值,改为var
- 容器有两种形式:var 和 let
-
不同类型的数据不能直接进行运算(Float和Double不可运算)
字符串差值
let fullName = "\(name) liu"
布尔类型
进行逻辑判断时用
let aa = true
let bb: Bool = true
// 默认是Double类型,小数优先使用Double类型
let bb = 3.14
// swift类型推断:根据等号右侧的值推断是字符串
var str = "Hello,playground"
// 在变量中三指轻点提示推断类型
//申明index1的类型是Int,默认是0,=前后有空格,空格不对称会报错
var index1: Int = 0
Int 3
Float 3.14 // 精度不同,
Double 3.1415926 // 用的较多
Bool true,false
String "Angela","Philipp" // 一定要用双引号
Int(取随机数)
index1 = Int.random(in:1...6 ) // 闭区间...会生成1到6之间的六个数字
摇骰子示例
- motionEnded 手机摇晃结束后,执行{}内的代码
//
// ViewController.swift
// Dice
//
// Created by 徐斌 on 2020/11/10.
//
import UIKit
class ViewController: UIViewController {
let diceImages = ["dice1","dice2","dice3","dice4","dice5","dice6"]
var index = 0
@IBOutlet weak var diceImageFirst: UIImageView!
@IBOutlet weak var sourceLabel: UILabel!
@IBOutlet weak var diceImageSecond: UIImageView!
@IBAction func btnRoll(_ sender: Any) {
rollBegin()
}
func rollBegin() {
let firstIndex = indexRandom()
let secondIndex = indexRandom()
let sourceNum = firstIndex + secondIndex + 2
diceImageFirst.image = UIImage(named: diceImages[firstIndex])
diceImageSecond.image = UIImage(named: diceImages[secondIndex])
sourceLabel.text = String(sourceNum)
}
// 摇手机手势结束之后执行函数
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
print("摇晃了手机")
rollBegin()
}
func indexRandom() -> Int {
return Int.random(in: 0...(diceImages.count-1))
}
override func viewDidLoad() {
super.viewDidLoad()
rollBegin()
// Do any additional setup after loading the view.
}
}
// round 是小数, pow()是平方
let bmi = round(weight / (pow(height,2)))
var sum = 0
// 对1到10进行取模运算,输出满足条件的数
for i in 1...10 where i % 2 == 0{
print(i)
}
//外部参数,内部参数 howMany是外部参数,total是内部参数
//一般我们不用外部参数
//也可以写下划线 _ ,也不常用
//func song( _ total:Int){
func song(howMany total:Int){
for i in (1...total).reversed(){
print("现在有\(i)"部iphone,卖出了一部,还剩\(i-1)部)
}
print("全部卖光啦")
}
song(howMany: 20)
关于tag的使用
-
使用场景:
设置button的tag值,该值为Int类型,区分哪一个button
-
例子:木琴app
// // ViewController.swift // 木琴 // // Created by 徐斌 on 2020/11/10. // import UIKit //A 是音频 V 是视频 Foundation 基础功能 import AVFoundation class ViewController: UIViewController { var player:AVAudioPlayer! // 文件需要拖拽到xcode根目录中,不能拖到访达,会找不到文件 let sounds = ["note1","note2","note3","note4","note5","note6","note7"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } // 拖拽UIButton的时候要选择Action ,type选择UIButton // button的tag属性在view那一栏 @IBAction func btnMusic(_ sender: UIButton) { play(tag: sender.tag) } func play(tag:Int) { // Bundle是app的根目录,main是主目录,forResource 是资源名字 withExtension是扩展名 let url = Bundle.main.url(forResource: sounds[tag], withExtension: "wav") //打印的是主目录的绝对路径 print(Bundle.main.bundlePath) // 在执行播放的时候会提示可能抛错,需要做异常处理 //错误提示:Errors thrown from here are not handled //进行docatch //错误提示:Value of optional type 'URL?' must be unwrapped to a value of type 'URL' // 翻译:可选类型“URL”的值?‘ 必须解包到“URL”类型的值‘ // 提示需要解包,用感叹号对 url 进行解包 do { // 错误提示:Result of 'AVAudioPlayer' initializer is unused // 提示'AVAudioPlayer未被使用,赋值给一个变量 player = try AVAudioPlayer(contentsOf: url!) player.play() }catch{ print(error) } } }
作用域(scope范围)
- 局部变量:在{}内定义的变量或常量,在它处是不能用的
- 全局变量:在{}外定义的变量或常量,在公共区域,都可以调用
通俗理解:在{}内定义的变量,其它地方是用不了的
MVC模式
- MVC是一个约定俗成的套路
- Model 数据管理
- View 展示
- Controller 处理数据,传递
面向对象编程
Object-oriented programming (OOP)
class Question{
let answer:Bool
let questionText:String
init(correctQuestion:String,text:Bool) {
questionText = correctQuestion
answer = text
}
}
// 初始化:从类变成对象的一个过程
let question1 = Question( correctQuestion:"马云是中国首富" ,text: true)