Swift基本语法的使用(一)

下面是本人对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
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容