美文网首页
Swift 字面量、模式匹配、条件编译

Swift 字面量、模式匹配、条件编译

作者: Aliv丶Zz | 来源:发表于2020-11-01 14:05 被阅读0次

1. 字面量

2. 模式

  模式是用于匹配的规则,比如switchcase 、捕捉错误的catchif/guard/while/for 语句的条件等

Swift的模式有:
  • 通配模式

_ 匹配任何值
_? 匹配非nil值

  • 标识符模式
  • 值绑定模式
  • 元组模式
  • 枚举case模式
    if case 语句等价于只有一个caseswitch语句
let age = 2

if case 0...9 = age{
    print("[0,9]")
}

switch age{
    case 0...9: print("[0,9]")
    default:
    break
}

let points = [(1, 0),(2, 2),(3, 0)]

for case let (x, 0) in points{
    print("(\(x), 0)")
}
//(1, 0)
//(3, 0)


for case let (x, y) in points{
    print("(\(x), (\(y))")
}
//(1, 0)
//(2, 2)
//(3, 0)
  • 可选模式
let dogAge : Any? = 10

switch dogAge{
    case  is Int:
     print("n is Int")
    default: break
}

switch dogAge{
case let n as Int:
    print("\(n) is Int")
    default: break
}

  • 表达式模式
let point = (1, 2)

switch point{
    case (0, 0):
        print("origin point");
    case(-2...3, 1...3):
        print(point)
    default:
        break
}

自定义表达模式:可以通过重载运算符,自定义表达式模式的匹配规则

class Student {
    var score = 0, name = ""
    //pattern: case 后面的内容
    //value : switch 后面的内容
    static func ~= (pattern: Int, value: Student) -> Bool{
        value.score >= pattern
    }
    static func ~= (pattern: ClosedRange<Int>, value: Student) -> Bool{
        pattern.contains(value.score)
    }

    init(score: Int, name: String) {
        self.score = score
        self.name = name
    }
}
var stu = Student(score: 75, name: "Jack")

switch stu{
    case 100:
        print(">= 100")
    case 90:
        print(">= 90")
    case 80...90:
        print("[80, 90]")
    case 60...79:
        print("[60, 79]")
    case 0:
        print(">= 0")
    default:
        break
}
var info = (Student(score: 50, name: "Jack"),"及格")

switch info{
    case let (60, text):
        print(text)
    default:
        print("不及格")
        break
}

3. 条件编译

//操作系统:macOS/iOS/tvOS/watchOS/Linux/Linux/Android/Windows/FreeDSB
#if os(macOS)

//CPUJ架构 arch(x86_64) || arch(arm64)
#elseif arch(x86_64)

//swift版本
#elseif swift(<5)&&swift(>=3)

//模拟器
#elseif targetEnvironment(simulator)

//可导入某模块
#elseif canImport(Foundation)

#else

#endif
自定义条件编译
image.png
// 自定义条件编译
#if DEBUG
print("1")

#endif

// 自定义条件编译
#if isTest
print("2")
#else
print("22")
#endif

#if TEST
print("3")
#else
print("33")
#endif```

相关文章

网友评论

      本文标题:Swift 字面量、模式匹配、条件编译

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