Swift基础语法

QQ图片20170905124607.jpg
屏幕快照 2017-09-12 上午10.43.46.png

摘要: 作为一个程序员,危机感十分严重,如果只会单一的一种语言,说不定就 Game Over,平时利用时间 学学 Swift ,H5, JAVA

变量与常量

声明常量/变量的方式 let/var name: Type
初始化值的方式 var/let name: Type = initValue
let 关键字用来声明常量,若给定确定的值,不可修改,修改编译报错
var 关键字用来声明变量,开发中最好给个初始值,可以修改

let firtstLet : Int
firtstLet = 2

var firstVar : Int
firstVar = 3

let secondLet : Int  = 4
/*
 second = 5 报错
 */

var secondVar : Int = 6
secondVar = 7

// 输出
print(firtstLet,firstVar,secondLet,secondVar)

类型推断

Swift 是推荐类型推断的,也就是不需要我们在声明时指定具体的类型,只需要赋值就可以根据值来自动推断出其数据类型;不是所有情况下都可以使用类型推断的,一定是我们知道已经知道其具体类型且我们希望是这种类型的情况下才使用类型推断.

//如: let constant = 10,不需要指定其类型为Int  Swift会根据数值 10 推断出其类型为int

let constant = 10

// 反例:let floatValue = 10.0  类型推断floatValue 为 Double 类型,是错误的
let floatValue = 10.0

// 正确写法
let floatValue1 : Float = 10.0
let floatValue2

类型转换

Swift 是强类型语言,比OC还要强,对于类型的转换,永远不会隐式转换,因此在需要类型转换的地方,必须手动添加代码转换

var doubleValue = 110.0
/*
 var intValue: Int = doubleValue 报错
 */
// 正确写法
var intValue: Int = Int(doubleValue)

类型别名

使用typealias关键字给一个已经存在的类型指定别名。指定别名后,就可以使用该别名来声明常量或者变量。

typealias AudioSample = Int

var name: Int = 1
// 等价于
var name1: AudioSample = 1;

布尔类型

在Swift中 布尔类型是使用 Bool 其值只有真假,也就是 true false 与 OC语言不同,不是 YES NO

var canTransfer = true
let isSuccessful = false

if canTransfer {
    print("d")
} else {
    print("g")
}

元组

OC中 没有元组类型,而 Swift 中的 元组类型 跟 OC中的数组,字典类似 ;声明元组类型很简单:()包裹起来,元素的类型可以是任意类型,元组内的元素可以通过 加上 0 1 2来访问,如果有名称 可以直接使用名称获取

let httpError = (404,"http not  found")

var httpError1 = (errorCode: 404,errorMessage: "http not found")

print(httpError.1,httpError1.errorCode)


let (statusCode,statusMessage) = httpError
print("The Code is \(statusCode)")

let (StatusCode,_) = httpError
print("\(StatusCode)")

可选项

可选项是个枚举值: nome :没有值, some 是某一类值;
var 的可选值默认为nil
let 没有默认的可选值

  • 原始定义
    let x : Optional = 10
  • 简单定义

“?” 用来定义 y是一个可选的int类型,可能没有值,也可能有一个整数

let y : Int? = 20

  • 强解包

不同类型的值 不能直接运算 如果nil 不能参与任何计算 表示 “强行解包” 从可选项中强行获取对应的非空值 如果真的是nil 的话 就崩掉

print(x! + y!)

可选项判断

如果 x, y 不为空 则可以强行解包

print(x! + y!)

?? 简单的三目运算 如果有值 则使用值 没有的话 就使用?? 后面的

print((x ?? 0) + (y ?? 0))

?? 的优先级比较低 使用的时候 加上 ()

let name : String? = "老王"
print((name ?? "") + "你好");

控制流

  • if语句 ( 1 , 条件没有 (); 2 ,语句必须要{};)
        let x = 10
        if x > 5 {
            print("大了")
        } else {
            print("笑了")
        }
    }
  • 三目运算(在swift中 ()表示空执行)
        let x = 10
         x > 3 ? print("dfa") : ()
  • if let / var(不是单纯的判断,是连用;进入分支一定有值)
      let Oname : String? = "老王"
        let Oage : Int? = 10
        
        // 避免强行解包奔溃,加上原始判断
        if Oname != nil &&  Oage != nil{
            print(Oname! + String(Oage!))
        }
        
        // if let  进入分支一定有值 
        if let name = Oname , let age = Oage {
            // name age 的作用域仅在 {}里
            // 不需要解包
            print(name + String(age))
        }else{
            print("至少有一个空值")
        }
  • guard let / var 守卫 ( guard let 于 if let 相反 如果没有值返回)
        let name : String? = "adfa"
        let age : Int? = 10
    
        // 如果没有值直接返回
        guard let newname = name , let newage = age else { return}
        // 一定有值
        print(newname + String(newage))
  • Switch

1,OC中 Switch 分支要求必须是整数,而 swift中 可以是任意类
2,swift 中 Switch一般不需要 break
3,swtch 如果要多值,使用,隔开
4,所有的分支至少需要一条指令,如果什么都不执行,才使用break

    func demo3(num:  NSString) {
        switch num {
        case "10","8":
            print("我是字符串")
        default:
            print("哈哈")
        }
    }

for 循环

变量在[0,5) 循环

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

变量i在 [0,5] 循环

        for i in 0...5 {
            print(i)
        }

反序遍历(关键词reversed())

        // 颠倒 翻转
        for i in (0..<10).reversed() {
            print(i)
        }

最后来一波无耻的广告:淘劵吧

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

推荐阅读更多精彩内容

  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,168评论 3 25
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,826评论 0 6
  • 简介 特点(1)优于OC,快速,安全(2)取消了预编译指令包括宏定义(OC用的太多了)(3)取消了OC指针和不安全...
    洛洛爱吃肉阅读 903评论 0 3
  • Swift 简介 查看Swift当前版本 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X...
    mian小爬阅读 319评论 0 1
  • 1、注释:添加单行语句的注释使用“//”;多行注释“/**/”;2、分号:可写可不写,一般不写;一行中多条语句时,...
    忘惘的小风扇阅读 509评论 0 0