快速结构初始化,使另一个结构类似于字符串 [英] Swift struct initialization, making another struct like String
本文介绍了快速结构初始化,使另一个结构类似于字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在SWIFTString
上是一个结构,您只需使用
var someString:String = "Hello"
如何使另一个Struct像字符串一样可初始化?
例如
struct StringV2 {
init()
}
class SomeClass {
let someStringV2:StringV2 = "Hello"
}
因为这就是String
的代码。
推荐答案
在我看来,这是语言的一部分。是的,由于ExpressibleByStringLiteral
协议,这是可能的。
不幸的是,它有一些复杂性。ExpressibleByStringLiteral
继承自ExpressibleByExtendedGraphemeClusterLiteral
,而ExpressibleByExtendedGraphemeClusterLiteral
继承自ExpressibleByUnicodeScalarLiteral
。因此,要符合第一个标准,您必须符合其上的另外两个标准。
这使得可以从以下位置初始化结构或类:
- A
UnicodeScalarLiteralType
(如aUnicodeScalar
,为单个Unicode代码点,如"A"
) - an
ExtendedGraphemeClusterLiteralType
(如aCharacter
,是UnicodeScalar
的集合,如"🐥"
) - A
StringLiteralType
(如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屋!
查看全文