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

Swift中String插值和String初始化器之间的区别

穆彬郁
2023-03-14
问题内容

我可以使用字符串插值或String初始值设定项将int,float,double读取为字符串。结果总是一样的。

var a: Int = 2

var c: Character = "e"

var d: String = "\(a)\(c)"

OR

var d: String = String(a) + String(c)

结果是一样的。d的值为“ 2e”

我发现的唯一区别是,字符串插值()可以在双引号内使用,而String()不能在双引号内使用。

这就是全部?我在这里想念什么吗?


问题答案:

字符串插值"\(item)"为您提供了调用description该项目的结果。
String(item)调用String初始化程序并返回一个String值,该值通常与String从字符串插值中获得的值相同,但不能保证。

考虑以下人为的示例:

class MyClass: CustomStringConvertible {
    var str: String

    var description: String { return "MyClass - \(str)" }

    init(str: String) {
        self.str = str
    }
}

extension String {
    init(_ myclass: MyClass) {
        self = myclass.str
    }
}

let mc = MyClass(str: "Hello")
String(mc)  // "Hello"
"\(mc)"     // "MyClass - Hello"


 类似资料:
  • Swift 5.x String初始化、定义 1. 字面量初始化字符串 1.1 单行字面量字符串 let str = "some string" 1.2 字面量初始化多行字符串 let str = """ The white Rabbit put on his spectacles. "Where shell I begin, please your Majesty?" he asked. "

  • 问题内容: 在Go语言中, 是一个字符串数组 并且我们也将其用作参数。 有什么区别? 功能定义: 我可以像下面这样调用此函数吗? 问题答案: 是一个字符串数组 从技术上讲,这是引用基础数组的切片 并且我们也将其用作参数。 有什么区别? 关于结构,真的没有。两种语法得出的数据类型相同。 该参数语法形成了可变参数的参数。它将接受零个或多个参数,并将它们作为切片引用。 关于调用,您可以使用以下语法将字符

  • 问题内容: 最近,我一直在Golang中努力处理SQL NULL值。在尝试使用和未能成功解组JSON对象后。 使用字符串指针的解决方案似乎可以与Decode()和nil值完美配合。那么和之间有什么区别?只是零检查吗? 问题答案: SQL具有与Golang不同的空值。 如果您查看的定义,那么您将获得: 如您所见,这是一种表示来自SQL的空字符串(对应于“ NULL”)的方法。另一方面,nil 是指向

  • 当专门处理非可选的值时,String内插和String串联之间的区别是什么? 是否有任何情况下,和是不同的?比如长unicode字符串 在上面的例子中,是否有可能以某种方式覆盖操作符的行为或插值的行为,使它们不同 一个比另一个快/慢吗 请注意,从这个问题中,我们了解到字符串插值将使用CustomStringConvertible的。但是串联(运算符)是否也调用?

  • 问题内容: 声明 Array 和 Dictionary的 更好方法,我都使用了: 对我来说,编码方面的速度非常快,但实际上两者在编译器和性能方面有何不同,我们应该遵循哪一个? 问题答案: 从Swift上的iOS开发者库… Swift数组的类型完整写为Array ,其中Element是允许数组存储的值的类型。您还可以将简写形式的数组类型写为[Element]。尽管 这两种形式在功能上是相同的 ,但

  • 问题内容: 我发现与BeautifulSoup一起使用时有些奇怪,找不到任何文档来支持此操作,所以我想在这里询问。 假设我们有一个这样的标签,我们已经用BS对其进行了解析: 提取数据的官方记录方法是。但是,这为第二个标签提取了NoneType 。所以我尝试了(因为为什么不呢?),它完全按照我的意愿提取了一个空字符串。 但是,我在文档中找不到对此的任何引用,并且担心某些内容会丢失。谁能告诉我这是否可