Swift5 简单使用

Swift5类型转换

swift中值永远不会隐式转换为另一种类型。如果需要将值转换为其他类型,请显式创建所需类型的实例.

let value = 12
let str = "age"
let res = str + String(value)
// 错误写法 let res = str + value 这种是没有类型推断的,甚至于在编写时就会报错  cannot be applied to operands of type 'String' and 'Int'
print(res)
// 结果: age12

Swift5字符串快速拼接

  • 拼接变量或者常量使用: \()
let apples = 5
let appleSummary = "I have \(apples) apples."
print(appleSummary)
// 结果: I have 5 apples.

\() 也可以用于浮点计算,如\(A+B)

  • 字符串折行

使用: """

let value = """
        Just like "The Shawshank Redemption",
        "I guess it comes down to a simple choice: Get busy living, or get busy dying. Busy living, or busy dying."
 """
 print(value)    

Swift5 if 条件判断

if语句中条件必须是布尔值或者表达式,而不是与零或者空的隐式比较。

在OBJC 中,你可以这样写:
NSString *str;
 if (str) {
     NSLog(str);
}

在swift 中则不行,你可以这样写
var str: String
str = "aaa"
str = ""
...// 其他操作
if str.count > 0 {
    print(str);
}

Swift5 可选值处理

处理方式很多,如if ,switch ,下面介绍一种ios中没有的 ??,

var str: String? = "aaa"
str = nil
var defaultValue = "bbb"
print(str ?? defaultValue)
其实它就是个三目,写法改变了而已

Swift5至少执行一次的repeat while(do-while in objc) 和 while

var a = 2
repeat {
    a = 2 * a
    print(a)
} while a < 2
// 结果: 4   
     
var b = 2
while b < 2 {
    b = 2 * b
    print(b)
}
// 结果:

Swift5特别方便的元组使用

在objc中方法返回多个参数时,要么数组,要么字典,必须得去构建个参数,swif使用元组t写法上则方便很多

override func viewDidLoad() {
     super.viewDidLoad()

     let result = filter(scores: [1,5,3,7,90,45])  
     print(result)
     //结果:  (min: 1, max: 90, sum: 151)
        
}
    
func filter(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
     var min = scores[0]
     var max = scores[0]
     var sum = 0

     for score in scores {
         if score > max {
             max = score
         } else if score < min {
             min = score
         }
         sum += score
     }

     return (min, max, sum)
 }

Swift5方法作为参数,方法作为传参,方法嵌套

这也是OC里面没有的,以下方法实现功能:求 平均年龄:最高学分,仅做演示功能需要,实际肯定不必这样写

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 年龄数组
        let a:[Float] = [14, 15, 16, 14]
        // 学分数组
        let b:[Float] = [80, 90, 96, 88]
        let result = setupParam(infoA: a, funcB: dealAge)
        print(result(b))
        // 结果: (averageAge: 14.75, averageCredit: 96.0)
        
    }
    
    // 求平均年龄
    func dealAge(ages: [Float]) -> Float {
        var total:Float = 0.0
        for age in ages {
            total += age
        }
        if ages.count > 0 {
            return total/Float(ages.count)
        }
        return 0
    }
    
    // 方法作为参数,方法作为返回值 求 平均年龄:最高学分
    func setupParam(infoA: [Float], funcB: ([Float]) -> Float) -> (([Float]) ->(averageAge: Float, averageCredit: Float)) {
        // 平均年龄
        let age = funcB(infoA)
        // 方法嵌套
        func avrage(numbers:[Float]) -> (avAge: Float, avCredit:Float) {
            let best = numbers.max() ?? 0
            return (age, best)
        }
        return avrage
    }

Swift5枚举

Swift会分配从零开始的原始值,并每次递增一,但是您可以通过显式指定值来更改此行为

    enum Poker: Int {
        case ace = 1
        case two, three, four, five, six, seven, eight, nine, ten
        case eleven, twelve, thirteen
        func translate() -> String {
            switch self {
            case .ace:
                return "A"
            case .eleven:
                return "J"
            case .twelve:
                return "Q"
            case .thirteen:
                return "K"
            default:
                return String(self.rawValue)
            }
        }
    }

let value = Poker.ace
print(value.translate())
// 结果: A

Swift5协议

使用protocol申报的协议,类,枚举和结构都可以采用协议。

protocol MyProtocol {
    var param: String { get }
    mutating func adjust()
}

class classB: MyProtocol {
    var param: String = "MyProtocol"
    func adjust() {
        param += " description"
        print(param)
    }
}

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let a = classB()
        a.adjust()
        // 结果:MyProtocol description
    }

Swift5类扩展

用于extension向现有类型添加功能,例如新方法和计算属性。

extension ViewController {
    var viewDes: String {
        return "ViewController des"
    }
    func printViewDes() -> String {
        return "extentions method \(viewDes)"
    }
}

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let des =  printViewDes()
        print(self.viewDes, des)
        // 结果 ViewController des extentions method ViewController des
        
    }

}

Swift5错误处理

先定义一个代表错误的枚举

enum MyError: Error {
    case lengthError, tooMuchError, tooLittleError
}
    override func viewDidLoad() {
        super.viewDidLoad()
        let str = "sdsadasdassssssss"
        do {
            let printerResponse = try checkContent(content: str)
            print(printerResponse)
        } catch {
            print(error)
        }
        // 结果:tooMuchError
    }
    
    func checkContent(content: String) throws -> String {
        if content.count > 10 {
            throw MyError.tooMuchError
        } else if content.count < 5 &&  content.count > 0 {
            throw MyError.tooLittleError
        } else if content.count == 0 {
            throw MyError.lengthError
        } else {
            print("valid");
        }
        return "checkContent done"
    }

Swift5 字符串(String)操作
Swift5 字符(Character)操作
Swift5 数组(Array)操作
Swift5 字典(Dictionary)操作
Swift5 集合(Set)操作
Swift5 简单使用
Swift OC动态调试工具 InjectionIII 使用

你可能感兴趣的:(Swift5 简单使用)