声明只能包含ASCII字符的Swift字符类型?
Swift的声明只能包含ASCII字符的Swift字符类型?,swift,encoding,character,Swift,Encoding,Character,Swift的字符数据类型是一个非常广泛的集合,我有一个用例,需要声明一个只能包含ascii字符的变量。该类型不能接受ascii以外的字符 我们是否有其他适合我的用例的内置数据类型 还是需要编写自定义解决方案 如果需要定制解决方案,实现它的最佳方法是什么 正如问题注释中所指出的,似乎不可能检查编译时 运行时解决方案可以是: 您可以通过.isASCII检查字符是否为Ascii,然后您可以创建一个自定义类,该类仅在满足条件时存储值 struct customasciclass{ 私有变量存储值:字符
字符
数据类型是一个非常广泛的集合,我有一个用例,需要声明一个只能包含ascii字符的变量。该类型不能接受ascii以外的字符
我们是否有其他适合我的用例的内置数据类型
还是需要编写自定义解决方案
如果需要定制解决方案,实现它的最佳方法是什么 正如问题注释中所指出的,似乎不可能检查编译时
运行时解决方案可以是: 您可以通过
.isASCII
检查字符是否为Ascii,然后您可以创建一个自定义类,该类仅在满足条件时存储值
struct customasciclass{
私有变量存储值:字符?=nil
变量值:字符{
得到{
返回self.storedValue??零
}
设置(新值){
if(newValue?.isASCII?false){
self.storedValue=newValue
}否则{
//处理不可能的值、抛出某些内容或使变量具有nil值。
打印(“无效:”,newValue)
}
}
}
}
用法:
var a=CustomAsciClass()
a、 值=字符(“a”)
打印(a.value)//可选(“a”)
var b=customasciclass()
b、 值=字符(“没有只包含ASCII字符的类型。存储ASCII代码的UInt8
如何?我可以使用UInt8,但我会失去键入文字字符的优势。我现在知道它需要一些自定义解决方案。你认为ExpressibleByStringLiteral可以帮助我创建自定义数据类型吗?一个问题是存在(据我所知)没有办法让编译器检查有效的ASCII文本,即在let a:MyASCIIChar=“假设我实现了一个符合ExpressibleByStringLiteral的自定义类型。我考虑过检查它是否在ascii范围内,如果不是ascii,则返回nil。尽管ExpressibleByStringLiteral声明的初始值设定项不是可选的,并且是一个死胡同,但还是有一个问题。正是如此。所有这些init(xxxLiteral:)
初始值设定项不可失败。字符
已具有isASCII
属性(至少在最新的Swift版本中),因此无需迭代unicodeScalars
。这是一种很好的方法,但我们无法在此解决方案中使用文字赋值。@GustavoVollbrecht我将接受这个答案。我想我现在肯定我们不能使用文字。文字是隐式非可选的,我不能有可选的初始值设定项f或者一些可以用文字表达的东西。请确认我是否正确。@RohanBhale你能重新表述一下吗?据我所知,是的。@GustavoVollbrecht重新表述:文字是隐含的非可选的(它们是文字,因为它们是按字面表达的,因此是非可选的)对于可以用文字表示的东西,我不能有一个可选的初始值设定项。让我们说让myChar:MyCustomChar=“¾”。如果可能的话,这将把非可选的MyCustomChar初始化为nil。或者我们可以说,只有当他们将变量声明为可选时,才可以使用它。