• 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)
    
  • 相关阅读:
    MySQL length函数
    MySQL between ... and ...
    MySQL Group By使用
    MySQL 聚合函数/分组函数
    MySQL where与like
    MySQL order by与distinct
    城市网络
    滑动窗口
    合并回文子串(NC13230)
    NC50439
  • 原文地址:https://www.cnblogs.com/exlo/p/13969612.html
Copyright © 2020-2023  润新知