Zon*_*ame 3 xcode struct initialization swift
在Swift上String是一个结构,你可以使用它来初始化它
var someString:String = "Hello"
Run Code Online (Sandbox Code Playgroud)
我如何将另一个Struct初始化为String?
例如
struct StringV2 {
init()
}
class SomeClass {
let someStringV2:StringV2 = "Hello"
}
Run Code Online (Sandbox Code Playgroud)
因为这就是String代码的样子.
这是(在我看来)整洁的语言部分.是的,由于ExpressibleByStringLiteral协议,这是可能的.
不幸的是,它有一些复杂性.ExpressibleByStringLiteral继承自ExpressibleByExtendedGraphemeClusterLiteral,本身继承自ExpressibleByUnicodeScalarLiteral.因此,为了符合第一个,你必须符合它上面的其他2.
这使您的结构或类可以从以下位置初始化:
UnicodeScalarLiteralType(例如,a UnicodeScalar,它是单个Unicode代码点,例如"A")ExtendedGraphemeClusterLiteralType(比如a Character,这是一个UnicodeScalars 的集合,如"")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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |