快速结构初始化,使另一个结构类似于字符串 [英] Swift struct initialization, making another struct like String

查看:44
本文介绍了快速结构初始化,使另一个结构类似于字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在SWIFTString上是一个结构,您只需使用

对其进行初始化
var someString:String = "Hello"

如何使另一个Struct像字符串一样可初始化?

例如

struct StringV2 {
    init()
}

class SomeClass {
    let someStringV2:StringV2 = "Hello"
}

因为这就是String的代码。

推荐答案

在我看来,这是语言的一部分。是的,由于ExpressibleByStringLiteral协议,这是可能的。

不幸的是,它有一些复杂性。ExpressibleByStringLiteral继承自ExpressibleByExtendedGraphemeClusterLiteral,而ExpressibleByExtendedGraphemeClusterLiteral继承自ExpressibleByUnicodeScalarLiteral。因此,要符合第一个标准,您必须符合其上的另外两个标准。

这使得可以从以下位置初始化结构或类:

  • AUnicodeScalarLiteralType(如aUnicodeScalar,为单个Unicode代码点,如"A")
  • anExtendedGraphemeClusterLiteralType(如aCharacter,是UnicodeScalar的集合,如"🐥")
  • AStringLiteralType(如String,是Characters的集合,如"This is a string")

下面是一个仅设置String成员变量的实现示例:

struct StringV2: ExpressibleByStringLiteral {
    let s: String

    init(unicodeScalarLiteral: UnicodeScalar) {
        s = String(unicodeScalarLiteral)
    }

    init(extendedGraphemeClusterLiteral: Character) {
        s = String(extendedGraphemeClusterLiteral)
    }

    init(stringLiteral: String) {
        s = stringLiteral
    }
}

let s1: StringV2 = "This is a string" // String
print(s1.s)

let s2: StringV2 = "A" // Unicode scalar
print(s2.s)

let s3: StringV2 = "🐥" // Extended grapheme cluster
print(s3.s)

这篇关于快速结构初始化,使另一个结构类似于字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆