Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
声明只能包含ASCII字符的Swift字符类型?_Swift_Encoding_Character - Fatal编程技术网

声明只能包含ASCII字符的Swift字符类型?

声明只能包含ASCII字符的Swift字符类型?,swift,encoding,character,Swift,Encoding,Character,Swift的字符数据类型是一个非常广泛的集合,我有一个用例,需要声明一个只能包含ascii字符的变量。该类型不能接受ascii以外的字符 我们是否有其他适合我的用例的内置数据类型 还是需要编写自定义解决方案 如果需要定制解决方案,实现它的最佳方法是什么 正如问题注释中所指出的,似乎不可能检查编译时 运行时解决方案可以是: 您可以通过.isASCII检查字符是否为Ascii,然后您可以创建一个自定义类,该类仅在满足条件时存储值 struct customasciclass{ 私有变量存储值:字符

Swift的
字符
数据类型是一个非常广泛的集合,我有一个用例,需要声明一个只能包含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。或者我们可以说,只有当他们将变量声明为可选时,才可以使用它。