当前位置: 首页 > 面试题库 >

〜= Swift中的运算符

慎星纬
2023-03-14
问题内容

我最近从Apple 下载了 Advanced NSOperations 示例应用程序,并找到了此代码…

// Operators to use in the switch statement.
private func ~=(lhs: (String, Int, String?), rhs: (String, Int, String?)) -> Bool {
    return lhs.0 ~= rhs.0 && lhs.1 ~= rhs.1 && lhs.2 == rhs.2
}

private func ~=(lhs: (String, OperationErrorCode, String), rhs: (String, Int, String?)) -> Bool {
    return lhs.0 ~= rhs.0 && lhs.1.rawValue ~= rhs.1 && lhs.2 == rhs.2
}

似乎使用了~=运算符来代替StringsInts但我从未见过。

它是什么?


问题答案:

它是用于case语句中模式匹配的运算符。

您可以在这里了解一下如何使用和利用它来提供自己的实现:

  • http://oleb.net/blog/2015/09/swift-pattern-matching/
  • http://austinzheng.com/2014/12/17/custom-pattern-matching/

这是定义和使用自定义变量的简单示例:

struct Person {
    let name : String
}

// Function that should return true if value matches against pattern
func ~=(pattern: String, value: Person) -> Bool {
    return value.name == pattern
}

let p = Person(name: "Alessandro")

switch p {
// This will call our custom ~= implementation, all done through type inference
case "Alessandro":
    print("Hey it's me!")
default:
    print("Not me")
}
// Output: "Hey it's me!"

if case "Alessandro" = p {
    print("It's still me!")
}
// Output: "It's still me!"


 类似资料:
  • 问题内容: 在“ Swift编程语言”一书(第599页)中,我遇到了使我感到困惑的这段代码。它是这样的: 其解释是: buyFavoriteSnack(_ :)函数查找给定人员的最爱小吃,并尝试为他们购买。如果他们没有列出最喜欢的小吃,它会尝试购买糖果。如果他们… 该解释如何映射到“ ??” 给定代码中的运算符。我们何时/应该在自己的代码中使用此语法? 问题答案: 它是“零合并运算符”(也称为“默

  • 问题内容: 我没有在Swift语言参考的基本算术运算符中看到定义的幂运算符。 语言中真的没有预定义的整数或浮点运算符吗? 问题答案: 没有操作员,但是您可以使用pow函数,如下所示: 如果愿意,还可以让操作员像这样调用pow函数:

  • 主要内容:1. 算术运算符,2.比较运算符,3.逻辑运算符,4.按位运算符,4.分配运算符,5.范围运算符,6.其它运算符,7.运算符优先级运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。 Swift内置运算符丰富,它提供以下类型的运算符 - 算术运算符 比较运算符 逻辑运算符 按位运算符 分配运算符 范围运算符 杂项运算符 本教程将逐一解释算术,关系,逻辑,按位,赋值和其他运算符。 1. 算术运算符 下表显示了Swift 4语言支持的所有算术运算符。 假设变量,变量,则 - 运算符 描述

  • 运算符是一个符号,用于告诉编译器执行一个数学或逻辑运算。 Swift 提供了以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 区间运算符 其他运算符 本章节我们将为大家详细介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符及其他运算符。 算术运算符 以下表格列出了 Swift 语言支持的算术运算符,其中变量 A 为 10,变量 B 为 20: 运算符 描述 实例

  • 为了在Swift中实现这一点,我将通过执行以下操作来获取除符号位以外的所有位, 注意数字必须是负数!如果shift操作符溢出,应用程序就会随着EXC_BAD_INSTRUCTION崩溃,这不是很好...另外,我是故意使用Int64的。因为没有更大的数据类型,所以执行类似(1<<63)的操作会溢出Int64并崩溃。因此,我没有在更大的数据类型中执行((1<<63)-1+negativeNumber)

  • 我理解CGFloat和Int之间的区别,但奇怪的是,我能够在if循环中使用 其中,image是未包装的UIImage及其大小。宽度是CGFloat,而数字200是Int类型,这可以在Xcode上运行,没有编译器错误。 然而与: Xcode返回错误: 二进制运算符' 并且Xcode无法运行。我在CGFloat上查看了Apple文档及其'=='和' 我的问题是,为什么一个有效,而另一个是错误?