-1
うまくいけば、誰かがこれに答えてくれることを願っています。ios swift - 関数によってインデックス作成に時間がかかり、ビルドしない
なぜxcodeがいつまでコンパイルしたのか、それがビルド/インデックス作成に苦しんでいた理由を知りました。
public func setLocationsToSession(view: UIViewController, Completion callback: @escaping (_ status: String) -> Void) {
getStudentLocations(view: view){(error, data) in
print("setting session")
print(data)
if let results = data!["results"] {
for student in results as! [AnyObject] {
// check the object for the required keys/subscripts
if let objectId = student["objectId"], let uniqueKey = student["uniqueKey"], let fname = student["firstName"], let lname = student["lastName"], let mapString = student["mapString"], let mediaURL = student["mediaURL"], let lat = student["latitude"], let lng = student["longitude"], let createdAt = student["createdAt"], let updatedAt = student["updatedAt"] {
// some other students are forgetting to POST/PUT the required key-value pairs in their request(s),
// and it breaks my code/app. So this is why i have all of these optional defaults
if(fname as String == "" || lname as String == "" || lat as String == "" || lng as String == "" || lat == 0 || lng == 0) {
// ignore the bad ones
continue
}
let newStudent = Student(dict: [
"objectId": objectId as? String ?? "",
"uniqueKey": uniqueKey as? String ?? "",
"firstName": fname as! String,
"lastName": lname as! String,
"mapString": mapString as? String ?? "",
"mediaURL": mediaURL as? String ?? "",
"latitude": lat as! Double ?? 0.0,
"longitude": lng as? Double ?? 0.0,
"createdAt": createdAt as? String ?? "",
"updatedAt": updatedAt as? String ?? ""
])
session.studentLocations.append(newStudent)
}
else {
continue
}
}
}
else {
let value = keys.error
callback(value)
}
let value = error == true ? keys.error : keys.success
callback(value)
}
}
public func getStudentLocation(view: UIViewController, key: String, Completion callback: @escaping (_ Error: Bool) -> Void) {
var reqDICT: [String: Any] = [String:Any]()
reqDICT["url"] = "https://parse.udacity.com/parse/classes/StudentLocation?where={\"uniqueKey\":\"\(key)\"}"
reqDICT["method"] = "GET"
let request = NSMutableURLRequest(url: URL(string: escapeString(value: reqDICT["url"] as! String))!)
request.httpMethod = reqDICT["method"] as! String
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("QrX47CA9cyuGewLdsL7o5Eb8iug6Em8ye0dnAbIr", forHTTPHeaderField: "X-Parse-Application-Id")
request.addValue("QuWThTdiRmTux3YaDseUSEpUKo7aBYM737yKd4gY", forHTTPHeaderField: "X-Parse-REST-API-Key")
reqDICT["request"] = request
httpRequest(view: view, requestDICT: reqDICT) {(error, data) in
print("error: \(error) ; data: \(data)")
if let results = data!["results"], results.count > 0 {
print("results exist: \(results.count)")
let Res = results as! [[String:AnyObject]]
let student = Res[0] as! AnyObject
print("results: \(results)")
print("student: \(student)")
let newStudent = Student(dict: [
"objectId": student["objectId"] as? String ?? "",
"uniqueKey": student["uniqueKey"] as? String ?? "",
"firstName": student["firstName"] as? String ?? "",
"lastName": student["lastName"] as? String ?? "",
"mapString": student["mapString"] as? String ?? "",
"mediaURL": student["mediaURL"] as? String ?? "",
"latitude": student["latitude"] as? Double ?? 0.0,
"longitude": student["longitude"] as? Double ?? 0.0,
"createdAt": student["createdAt"] as? String ?? "",
"updatedAt": student["updatedAt"] as? String ?? ""
])
session.you = newStudent
session.objID = student["objectId"] as! String
session.dataExists = true
}
else {
session.dataExists = false
}
callback(error)
}
}
HTTPリクエストからのJSON応答を処理するためにこれらの関数を作成しました。問題は、結果配列内のすべてのjsonオブジェクトが同じキーを持つわけではないことです。一部の人は他の人が行うキーを持っていません。そのため、私が書いたこの2つの関数では、if let
ステートメントのJSONオブジェクトのキーをアンラップしようとしましたが、nil
を防ぐために新しいstruct
をインスタンス化しています。これは、xcodeがこれらの2つのコメントを書き留めたときにコンパイル/ビルド/実行するために、xcodeが永久にコンパイルされる原因となっています。これについてどうすればいいですか?ありがとう!
okですので、最初に辞書を作成してからStruct権限に渡しますか?私はそれを試してみる。ありがとう! – ryanwaite28
https://medium.com/@RobertGummesson/regarding-swift-build-time-optimizations-fc92cdd91e31をご覧になり、そこに記載されているツールを使用することもできます。 – valcanaia