美文网首页
Swift学习分享(二)

Swift学习分享(二)

作者: Eric_Jia | 来源:发表于2016-12-08 19:48 被阅读0次

一,for循环

  1. 在Swift 3.0当中,OC风格的for循环不再使用;
var sum = 0
for var i = 0; i < 10; i++ {
    sum += i
}
print(sum)
  1. for-in,0..<10 表示从0到9;
sum = 0
for i in 0..<10 {
    sum += i
}
print(sum)
  1. 范围 0...10 表示从0到10;
sum = 0
for i in 0...10 {
    sum += i
}
print(sum)
  1. 省略下标, _能够匹配任意类型, _表示忽略对应位置的值;
for _ in 0...10 {
    print("hello")
}

二,字符串

  1. 在 Swift 中绝大多数的情况下,推荐使用 String 类型;
  2. String 是一个结构体,性能更高,而且具有了绝大多数 NSString 的功能,String 支持直接遍历;
  3. NSString 是一个 OC 对象,性能略差,Swift 提供了 String 和 NSString 之间的无缝转换;

字符串演练

  1. 遍历字符串中的字符;
for s in str.characters {
    print(s)
}
  1. 字符串长度;
// 返回以字节为单位的字符串长度,一个中文占 3 个字节
let len1 = str.lengthOfBytes(using: String.Encoding.utf8)
// 返回实际字符的个数
let len2 = str.characters.count
// 返回 utf8 编码长度
let len3 = str.utf8.count
  1. 字符串拼接,直接在 " " 中使用\ (变量名) 的方式可以快速拼接字符串;
let str1 = "Hello"
let str2 = "World"
let i = 32
//这样的字符串拼接方式有些时候可以替代 stringWithFormat
str = "\(i) 个 " + str1 + " " + str2
  1. 可选项的拼接;如果变量是可选项,拼接的结果中会有 Optional,为了应对强行解包存在的风险,苹果提供了 ?? 操作符,?? 操作符用于检测可选项是否为 nil,如果不是 nil,使用当前值,如果是 nil,使用后面的值替代;
let str1 = "Hello"
let str2 = "World"
let i: Int? = 32
str = "\(i ?? 0) 个 " + str1 + " " + str2
  1. 格式化字符串,在实际开发中,如果需要指定字符串格式,可以使用 String(format:...) 的方式;
let h = 8
let m = 23
let s = 9
let timeString = String(format: "%02d:%02d:%02d", arguments: [h, m, s])
let timeStr = String(format: "%02d:%02d:%02d", h, m, s)

String & Range 的结合

1, 在 Swift 中,String 和 Range连用时,语法结构比较复杂,如果不习惯 Swift 的语法,可以将字符串转换成 NSString 再处理;

 let helloString = "我们一起飞"
 let str = (helloString as NSString).substring(with: NSMakeRange(2, 3))       
 print(str)

2, 使用Range的写法;
Swift 2.0 写法(已经废弃不用了)

let helloString = "hello"
let startIndex = helloString.startIndex.advancedBy(0)
let endIndex = helloString.endIndex.advancedBy(-1)

var result = helloString.substringWithRange(startIndex..<endIndex)
print(result)

Swift 3.0 写法

let str = "hello"
       
//startIndex光标开始位置的索引
var result = str.substring(from: str.startIndex)
        
//startIndex光标开始位置的索引
result = str.substring(from: str.endIndex)
        
//开始截取的光标索引
let startIndex = str.index(str.startIndex, offsetBy: 1)
//截取到光标索引
let endIndex = str.index(str.endIndex, offsetBy: -1)

result = str.substring(with: startIndex..<endIndex)
print(result)

三,集合

数组

  1. 数组使用 [] 定义,这一点与 OC 相同;
//: [Int]
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  1. 遍历;
for num in numbers {
    print(num)
}
  1. 通过下标获取指定项内容;
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let num1 = numbers[0]
let num2 = numbers[1]
  1. 可变数组&不可变数组;let 定义不可变数组,var 定义可变数组;
let array = ["zhangsan", "lisi"]
//: 不能向不可变数组中追加内容
//array.append("wangwu")
var array1 = ["zhangsan", "lisi"]

//: 向可变数组中追加内容
array1.append("wangle")

5.数组的类型;如果初始化时,所有内容类型一致,则数组中保存的是该类型的内容;如果初始化时,所有内容类型不一致,择数组中保存的是NSObject;

var array1 = ["zhangsan", "lisi"]
//: array1 仅允许追加 String 类型的值
//array1.append(18)

var array2 = ["zhangsan", 18]
//: 在 Swift 中,数字可以直接添加到集合,不需要再转换成 `NSNumber`
array2.append(100)
//: 在 Swift 中,如果将结构体对象添加到集合,仍然需要转换成 `NSValue`
array2.append(NSValue(CGPoint: CGPoint(x: 10, y: 10)))

6.数组的定义和实例化;使用 : 可以只定义数组的类型;实例化之前不允许添加值;使用 类型 可以实例化一个空的数组;

var array3: [String]
//: 实例化之前不允许添加值
//array3.append("laowang")
//: 实例化一个空的数组
array3 = [String]()
array3.append("laowang")

7.数组的合并;必须是相同类型的数组才能够合并;开发中,通常数组中保存的对象类型都是一样的!;

var array1 = ["zhangsan", "lisi"]

var array2 = ["zhangsan", 18]

var array3: [String]
//: 实例化之前不允许添加值
//array3.append("laowang")
array3 += array1

//: 必须是相同类型的数组才能够合并,以下两句代码都是不允许的
//array3 += array2
//array2 += array3

8.数组的删除

//: 删除指定位置的元素
array3.removeAtIndex(3)
//: 清空数组
array3.removeAll()

字典

  1. 字典的定义;
    同样使用 [] 定义字典
    let 定义不可变字典
    var 定义可变字典
    [String : Any] 是最常用的字典类型
var dict = [String: Any]()
dict1["nickname"] = "大老虎"
  1. 字典的赋值;
    赋值直接使用 dict[key] = value 格式
    如果 key 不存在,会设置新值
    如果 key 存在,会覆盖现有值
//: * 如果 key 不存在,会设置新值
dict["title"] = "boss"
//: * 如果 key 存在,会覆盖现有值
dict["name"] = "lisi"
  1. 字典的遍历;
    k,v 可以随便写
    前面的是 key
    后面的是 value
//: 遍历
for (k, v) in dict {
    print("\(k) ~~~ \(v)")
}
  1. 合并字典;
    如果 key 不存在,会建立新值,否则会覆盖现有值
//: 合并字典
var dict1 = [String: NSObject]()
dict1["nickname"] = "大老虎"
dict1["age"] = 100
//: 如果 key 不存在,会建立新值,否则会覆盖现有值
for (k, v) in dict1 {
    dict[k] = v
}
print(dict)

相关文章

  • Swift学习分享(二)

    一,for循环 在Swift 3.0当中,OC风格的for循环不再使用; for-in,0..<10 表示从0到9...

  • swift基础知识1

    最近在学习swift,把我学习内容分享给跟我一样在学习swift的小伙伴。 import UIKit class ...

  • ★学习笔记:《iOS高级:Swift入门精讲①》第一节 Swif

    前言本篇文章,为视频学习笔记。 目录:一、Swift简介二、Swift之父Chris Lattner三、Swift...

  • swift ui 数据绑定二传递结构体

    前言 : 最近在学习iOS swift ui 里面的数据绑定 ,这是第二小节 传递结构体 想着分享给大家。 效果图...

  • swift学习(二)

    1.元组 //元组 (和C中的结构非常像) 是一个将多个类型相同或不同 的数据结合成一个数据的形式 //一个元组中...

  • Swift 学习(二)

    闭包练习篇 看着方便,所以定义了一个结构体 注释都是个人浅薄的理解,欢迎大家指正

  • swift 学习(二)

    参数标签可以省略,但是苹果官方不推荐这样使用 输入输出参数(在函数里面修改外部变量):关键词 inout 入参...

  • Swift学习分享(一)

    大家好,一直想对于自己学习Swift语言的笔记做一个总结,分享给像我一样的“Swift小白”们入门学习使用...

  • Swift学习笔记①

    Swift学习笔记①Swift学习笔记①

  • Swift和OC互调

    整理之前学习swift的笔记,虽然现在看起来很简单,但还是想分享出来。 (一)Swift调用OC 假设:我们的项目...

网友评论

      本文标题:Swift学习分享(二)

      本文链接:https://www.haomeiwen.com/subject/hfysmttx.html