swift 什么时候用户的Locale.current.region可以为空?

7kqas0il  于 2022-11-28  发布在  Swift
关注(0)|答案(1)|浏览(153)

locale region是Foundation中的可选属性。据我所知,该属性是从iOS Settings > General > Language & Region > Region下的设备中读取的。
区域属性为nil的可能场景是什么;为什么它是可选?

kfgdxczn

kfgdxczn1#

据我所知,此属性是从iOS Settings > General > Language & Region > Region下的设备读取的
好吧,那应该是Locale.current,但这不是Locale示例的唯一示例,你可以创建自己的语言环境。
更准确地说,region是:
此属性对应于Unicode BCP 47扩展的rg键。对于使用rg说明符(如en-GB@rg=US)或自定义Locale.Components创建的区域设置示例,此属性表示自定义区域。否则,它表示语言的区域。
我试着将Locale.Components.region设置为nil,但是这样创建的Locale仍然具有该语言的默认区域:

var components = Locale.Components(languageCode: .english)
components.region = nil
let locale = Locale(components: components)
print(locale.region) // US

如果Locale.Language不属于任何区域,则region为nil。而这样的Locale.Language确实存在!例如:

// zxx - no linguistic content
let unidentified = Locale(languageCode: .unidentified)
print(unidentified.region) // nil

// mul - multiple languages
let multiple = Locale(languageCode: .multiple)
print(multiple.region) // nil

因此region必须是可选的 * 至少 *,因为mulzxx“语言”,如BCP 47中所要求的。

相关问题