![](/img/trans.png)
[英]HTTPURLResponse allHeaderFields Swift 3 Capitalisation
[英]HTTPURLResponse.localizedString(forStatusCode:) not in development language
我正在制作一個iOS應用,但是我遇到了這個問題。
project.pbxproj
內的developmentRegion = es;
並更改了Info.plist
的CFBundleDevelopmentRegion=es
) Localizable.strings
,以使所有Strings
在一個文檔中。 而且我所有的NSLocalizedStrings
可以正常工作 當我使用函數HTTPURLResponse.localizedString(forStatusCode:)
時,問題就出來了,它只會給我英文Strings
。 以前可以正常工作,但是添加Localizable.string
后就不能正常工作了
任何將Strings
帶回西班牙語的幫助嗎?
我認為您缺少正確的方法。
您無需將低級網絡錯誤定位為:
對於III點:
final private func downloadMyData(){
guard let myURL = URL(string: "__https://ingconti.com/wrongurl") else{
return
}
let session = URLSession.shared
let task = session.dataTask(with: myURL) { (data: Data?, response: URLResponse?, error: Error?) in
// session cannot be created...
if let error = error {
self.manageLowLevel(error: error)
return
}
var statusCode: Int = 0
if let httpResponse : HTTPURLResponse = response as? HTTPURLResponse{
statusCode = httpResponse.statusCode
}
if 200 ... 299 ~= statusCode {
self.parse(data: data)
}else{
self.manageHTTPError(code: statusCode, data: data)
}
}
task.resume()
}
如果遇到BIG錯誤(例如,在我的代碼中,我使用了錯誤的前綴“ __https”),則您將得到_code = -1022,
您可以通過以下方式進行管理:
final private func manageLowLevel(error: Error){
#if DEBUG
print(error)
#endif
var msg = ""
let code = error._code
switch code {
case -1002:
msg = localized("GENERIC_NETWORK_ERR")
default:
msg = localized("GENERIC_NETWORK_ERR")
}
// display msg... (on MAIN THREAD...)
}
func localized(_ msg: String)->String{
let s = NSLocalizedString(msg, comment : "")
return s
}
您可以在其中向最終用戶屏蔽消息,並使消息更通用(並使用便捷功能“本地化”進行本地化)
對於HTTP錯誤(例如,找不到資源...即“ https://ingconti.com/wrongurl ”),您將在http / s中收到錯誤404。
因此,您可以執行類似的操作:
最后的私有函數manageHTTPError(code:Int,data:Data?){保護let data = data else {return}
#if DEBUG
if let s = String(data: data, encoding: .utf8){
print(s)
}else{
if let s = String(data: data, encoding: .ascii){
print(s)
}
}
#endif
var msg = ""
switch code {
case 404:
msg = localized("NETWORK_CODE_404")
default:
msg = localized("GENERIC_NETWORK_ERR")
}
// display msg...
}
甚至合並在一起。
(字符串s在
#if DEBUG if s = .....
將顯示服務器錯誤,並且再次不顯示給用戶...)
總結一下:這樣就不會顯示低級錯誤,請查看提示信息,例如在本地化的字符串中可以有:
“ GENERIC_NETWORK_ERR” =“網絡錯誤”; “NETWORK_CODE_404”。 =“網絡錯誤(無數據)”;
和西班牙語...
“ GENERIC_NETWORK_ERR” =“紅色錯誤”; ...
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.