Swift基本语法的使用(一)

2016-07-22  本文已影响0人  SuperNing

下面是本人对objc学习转向swift的一些基本知识的心得,如有错误的地方,希望大家能够帮忙指出
首先最明显的地方就是语法规范了,swift中语句结尾没有分号,而且swift将点语法体现的淋漓尽致,整篇代码中的方法的调用都是用的点语法,一点到底,比如以下方法调用的代码

var dict: Dictionary<String, String> = [:]
dict = ["b" : "c"]
dict.removeValueForKey("b")

然后在swift随处可见的var 和 let 两个关键词 var 声明变量的 let 声明常量的
下面就对swift中的部分基本语法简单分享以下吧
一、各种数据类型的常量、变量的定义
因为之前说过常量与变量的差别主要是一个使用的var 另一个是 let 所以以下罗列几个var修饰的吧

var num:Int = 88
var num2:Float = 13.3
var str:String = "阿呆是个好同志"
var c:Character = "x"
var isTrue:Bool = true

通过以上的格式可以看出 指明数据类型常量的声明格式如下:
**var 变量名:数据类型 = 值 **
在oc中BOOL的值是YES和NO 但是swift中则是true和false 由于swift是强语言,所以不支持隐式转换,下面对swift中字符串的简单操作

let str = "hello"
// 字符串长度
str.characters.count
str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
// 大小写转换
str.uppercaseString
str.lowercaseString
// 拼接
"123\(str)4555"

二、数组和字典

// 不可变数组
let array1 = ["A","B","C","D"]
// initWith/init在swift里面全部转换成()
let array2 = [String]()
//元素个数.count
//数组遍历for-in (明确的指出数组的类型)
for temp in array1 as [String]{
print(temp)
}
//元组遍历
for (index,value) in array1.enumerate(){
print("index = \(index),value = \(value)")
}
//可变数组
var mutableArray = [String]()
mutableArray.append("hello")
mutableArray.append("world")
print(mutableArray)
mutableArray.removeFirst(1)
print(mutableArray)
//字典Dictionary
let dict = ["key1":"value1","key2":"value2","key3":"value3"]
print(dict)
//通过key值访问value值
print(dict["key1"])
// for-in遍历
for (key,value) in dict
{
print("key = \(key), value = \(value)")
}
//可变字典
var dict3 = ["key":"value"]
// (合并)
for (tempkey,tempValue) in dict {
//如果key存在则是一个更新键值对操作,否则是一个增加键值对操作
dict3[tempkey] = tempValue
}
print(dict3)

三、If语句

// 可选类型的条件分支
let str:String? = "hello"
// 1. if-let是对可选类型的判断,如果可选类型为nil,则不执行代码块,如果不为空则用tempStr来接收此刻这个可选类型的解包的值
if let tempStr = str {
  print(tempStr)
}
// 2. if-let-where 跟if-let相似,where是对前面定义的这个局部变量再做一层判断
if let tempStr = str where tempStr.characters.count > 2{
  print("tempStr.length = \(tempStr.characters.count)") 
}
// 3.guard-let-else
// 如果可选类型str为nil,则执行code代码块,最后一定要return,如果不为nil则强制解包后的值赋给tempStr,这样在{}外面就可以使用tempStr
guard let tempStr = str else{
  code...
  return
}

四、switch
switch 不局限判断整型,可以是浮点型,也可以是字符串
switch后面的小括号可以省略,大括号不能省略
case后面至少要有一条执行语句 并且case后面的大括号可以省略,break可以不写,不会造成贯穿
default一定要写,并且只能写在最后

let f = 3.2
switch f {
case 3.0:
  print("a")
 case 3.1:
  print("aa")
case 3.2:
  print("aaa")
default:
  print("unknown")
}

五、for循环
该写法是在swift2.2的时候被废弃掉

for (var i = 0;i < 5;i++){
  
}

现在采用以下写法
0..<5相当于 [0,5)
0...5相当于 [0,5]

for i in 0..<5{
  print("i = \(i)")
}

六、枚举
枚举值可以关联浮点,字符串,没有默认的关联值
关联如果是Int,会默认的递增上去;如果不是Int,必须每个枚举值都关联上对应值

// 此处是Float型所以每个枚举值都要关联上对应值
enum Month:Float {
  case January = 18.8
  case February = 13.4
  case March = 19.2
  case April = 17.6
}
//如果明确指出一个变量、变量是属于哪种枚举类型的话,可以直接枚举赋值,否则就  ---- 枚举类型.枚举值
let month = Month.April
let month2:Month = .February
var month1 = Month.March
month1 = .January

switch month{
case .January:
// hashValue指第几个枚举值,rawValue指所对应的关联值
  print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")
  print(month)
case .February:
  print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")
  print(month)
case .March:
  print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")
  print(month)
case .April:
  print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")
  print(month)
}

七、懒加载
懒加载苹果给予了很形象的一个词: lazy
格式:
lazy var 变量名:变量类型 = {
code...
return
}()

// 以一个button的懒加载为例
  lazy var btn:UIButton = {
    var tempBtn = UIButton(type:UIButtonType.ContactAdd)
    tempBtn.frame = CGRectMake(90, 100, 50, 50)
    tempBtn.backgroundColor = UIColor.cyanColor()
    return tempBtn
  }()

八、函数
函数主要分为四种

// 无参无返
func test()
{
  print("i love swift")
}
test()
//无参有返
func test1()->Int
{
  return 10
}
test1()
// 有参无返
// 当方法有参数的时候 第一个参数名 不显示 要在前面加上
func test2(num1 num1: Int, num2 : Int)
{
  print(num1 + num2)
}
test2(num1: 10, num2: 10)
// 有参有返
func test3(num1: Int, num2: Int) -> Int
{
  return num1 + num2
}
test3(10, num2: 30)

也可以元组作为返回值

// 元组作为返回值
func yuanzu(num1: Int, num2: Int) -> (Int, Int)
{
  return (num1 + num2, num1 * num2)
}
yuanzu(10, num2: 60)

swift中在函数中有个十分牛的地方就是可以实现函数的嵌套 在一个函数内部定义一个新的函数并使用

// 函数的嵌套
func test4()
{
  print("1")
  func test5()
  {
    print("2")
  }
  test5()
}

使用函数嵌套完成简单计算器的实现
要求使外界传入两个数和一个符合 + - * / 来进行计算

func jisuanqi(num1: Float, fuhao: Character, num2: Float) -> Float { 
  func add(num1: Float, num2: Float) -> Float
  {
    return num1 + num2
  }
  func sub(num1: Float, num2: Float) -> Float
  {
    return num1 - num2
  }
  func lead(num1: Float, num2: Float) -> Float
  {
    return num1 * num2
  }
  func div(num1: Float, num2: Float) -> Float
  {
    return num1 / num2
  }
  switch fuhao {
  case "+":
    return add(num1, num2: num2)
  case "-":
   return sub(num1, num2: num2)
  case "*":
   return lead(num1, num2: num2)
  case "/":
    return div(num1, num2: num2)
  default:
    return 0
  } 
}

九、闭包
要求实现:定义一个方法(输入参数color,frame,closure(是将刚才的color,frame当做参数,返回一个UIview)),返回一个UIview添加到View上

override func viewDidLoad() {
    super.viewDidLoad()
// 格式:   
/*     闭包:
     {
      (参数名:参数类型) -> 返回值类型 in
      code.....
    }
   
*/
   
let view:UIView = combineView(UIColor.blueColor(), frame: CGRect.init(x: 0, y: 100, width: 375, height: 400)) { (tempColor, tempFrame) -> UIView in
      let view = UIView()
      view.backgroundColor = tempColor
      view.frame = tempFrame
      return view
    }   
 view.addSubview(view) // swift里面不写self,一般只有在闭包内部才会强制要求写self
  }
  
func combineView(color:UIColor,frame:CGRect,closure:(tempColor:UIColor,tempFrame:CGRect)->UIView ) -> UIView{
    // 执行闭包
    let view:UIView = closure(tempColor: color,tempFrame: frame)
    return view
  }
上一篇 下一篇

猜你喜欢

热点阅读