有効なJSONオブジェクトをきれいに印刷しようとすると、私は邪魔にならないというエラーに陥りました。この問題は辞書に情報を追加しようとしたときに始まり、辞書の拡張機能がこのタスクに必要でした。辞書にデータを追加するとスウィフトスクリプトでエラーが発生する
コードの目的は、のLinuxにアルバートランチャーの拡張テンプレートを作成することです。
エラーは次のとおりです。
./org.albert.extension.external.snippy.swift:10:21: warning: no calls to throwing functions occur within 'try' expression
let jsonS = try String(data: jsonD, encoding: String.Encoding.utf8)
^
fatal error: Error raised at top level: The operation could not be completed: file /home/buildnode/jenkins/workspace/oss-swift-4.0-package-linux-ubuntu-16_10/swift/stdlib/public/core/ErrorType.swift, line 187
Current stack trace:
0 libswiftCore.so 0x00007f089c352bc0 _swift_stdlib_reportFatalErrorInFile + 221
、コードは次のとおりです。ALBERT_OP="QUERY" ./script.swift
:
#! /usr/bin/swift
import Glibc
import Foundation
let albert_op = ProcessInfo.processInfo.environment["ALBERT_OP"]
extension Dictionary where Key == String {
func toPrettyJSON() throws -> String? {
let jsonD = try JSONSerialization.data(withJSONObject: self,options: [.prettyPrinted])
let jsonS = try String(data: jsonD, encoding: String.Encoding.utf8)
return jsonS
}
}
if albert_op == "METADATA" {
let metadata : [String: Any] = [
"iid": "org.albert.extension.external/v2.0",
"name": "snippets",
"version": "0.1",
"author": "lf-araujo",
"dependencies": [],
"trigger": "snip "
]
let jsonData = try JSONSerialization.data(withJSONObject: metadata)
let JSONString = String(data: jsonData, encoding: String.Encoding.utf8)!
print(JSONString)
} else if albert_op == "QUERY" {
let filemgr = FileManager.default
let filelist = try filemgr.contentsOfDirectory(atPath: "~/.snippy")
func buildItem(name: String) -> [String:Any] {
let action : [String: Any] = [
"name": name
]
return action
}
var items : [String: Any] = [:]
items["items"] = filelist.map { buildItem(name: $0) }
if let jsonStr = try? items.toPrettyJSON() {
print(jsonStr!)
}
}
exit(0)
問題を再現するためには、でコードを実行する必要があります。
'String(data:jsonD、encoding:String.Encoding.utf8)'はエラーをスローしません。 'try'ブロックを削除することができます –
ありがとうございます。それは本当ですが、主な問題はそのままです。 –