……

IOS学习随笔

IOS ICON 制作网站

图标生成 https://www.canva.com/

生成整套图标 https://appicon.co


swift驼峰法命名

  • 变量:小驼峰法f命名

​ 例:diceImageView

​ btnRoll

  • 文件名:大驼峰法命名

    ​ 全大写


变量申明

  • 申明一个变量就是制造一个容器,将数据放进去

    • 容器有两种形式:var 和 let
      • var是变量,可变的
      • let是常量,是不可变的

    let耗内存小,var可变。

    首先考虑用let,如果提示不能给常量重新赋值,改为var

  • 不同类型的数据不能直接进行运算(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是一个约定俗成的套路
    1. Model 数据管理
    2. View 展示
    3. 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)

posted on 2020-11-13 15:33  Exlo  阅读(84)  评论(0编辑  收藏  举报

导航