I am creating a dictionary in swift and it is taking a very long time (20 min) to compile
import Foundation
extension Renter {
var dictionaryRepresentation: [String: Any]? {
guard let email = email,
let zipCode = wantedZipCode,
let city = wantedCity,
let state = wantedState,
let country = wantedCountry,
let creditRating = creditRating,
let firstName = firstName,
let lastName = lastName,
let id = id
else { return nil }
var dictionaryRepresentation: [String: Any] = [UserController.kEmail: email,
UserController.kZipCode: zipCode,
UserController.kCity: city,
UserController.kState: state,
UserController.kCountry: country,
UserController.kCreditRating: creditRating,
UserController.kPetsAllowed: wantsPetFriendly,
UserController.kSmokingAllowed: wantsSmoking,
UserController.kWasherDryer: wantsWasherDryer,
UserController.kGarage: wantsGarage,
UserController.kDishwasher: wantsDishwasher,
UserController.kBackyard: wantsBackyard,
UserController.kPool: wantsPool,
UserController.kGym: wantsGym,
UserController.kFirstName: firstName,
UserController.kLastName: lastName,
UserController.kMonthlyPayment: Int(wantedPayment),
UserController.kID: id,
UserController.kBedroomCount: Int(wantedBedroomCount),
UserController.kBathroomCount: wantedBathroomCount,
UserController.kBio: bio ?? "No bio available",
UserController.kStarRating: starRating,
UserController.kMaritalStatus: maritalStatus ?? "Not specified",
UserController.kCurrentOccupation: currentOccupation ?? "No occupation yet",
UserController.kWithinRangeMiles: withinRangeMiles,
UserController.kBankruptcies: bankruptcies,
UserController.kCriminalHistory: criminalHistory ?? "",
UserController.kDriversLicenseNumber: driversLicenceNum ?? "",
UserController.kDriversLicensePicURL: driversLicensePicURL ?? "",
UserController.kEvictionHistory: evictionHistory ?? "",
UserController.kIncome: income ?? 0,
UserController.kIsStudent: isStudent ?? false,
UserController.kIsVerified: isVerified ?? false,
UserController.kPreviousAddress: previousAddress ?? "",
UserController.kReasonsForLeaving: reasonForLeaving ?? "",
UserController.kSchool: school ?? "",
UserController.kStudentID: studentID ?? "",
UserController.kStudentPhotoIdURL: studentPhotoIDURL ?? ""]
guard let profileImageArray = self.profileImages?.array as? [ProfileImage] else { return dictionaryRepresentation }
let imageURLs = profileImageArray.flatMap({$0.imageURL})
dictionaryRepresentation[UserController.kImageURLS] = imageURLs
guard let occupationHistory = self.occupation?.allObjects as? [Occupation] else { return dictionaryRepresentation }
let occupationDicts = occupationHistory.flatMap({ $0.dictionaryRepresentation })
dictionaryRepresentation[UserController.kOccupationHistory] = occupationDicts
return dictionaryRepresentation
}
}
I've tested it and I know it is the creation of this dictionary because I've tried removing half of the dictionary and it compiles much faster. Does anybody have some tips on how to speed this up?
Assigning a literal value to a dictionary is buggy in the current versions of Swift and likely to trigger compilation issues. A quick workaround is to avoid literals and do it the long way.
var dictionaryRepresentation = [String: Any]()
dictionaryRepresentation[key1] = value1
dictionaryRepresentation[key2] = value2
...
It generates more code but it compiles really quickly.
I give a complete code example that compiles very quickly in this manner... I am sure you can modify your own code similarly...
import Foundation
func getDict(email : String, zipCode : String, city: String, state: String, country: String, creditRating: String,
wantsPetFriendly: Bool, wantsSmoking: Bool, wantsWasherDryer: Bool, wantsGarage: Bool, wantsDishwasher: Bool,
wantsBackyard: Bool, wantsPool: Bool, wantsGym: Bool, firstName: String, lastName: String,
wantedPayment: NSNumber, id: Int, wantedBedroomCount: NSNumber, wantedBathroomCount: NSNumber,
bio: String?, starRating: Int, maritalStatus: String?, currentOccupation: String?,
withinRangeMiles: Bool, bankruptcies: String, criminalHistory: String?,
driversLicenceNum: Int?, driversLicensePicURL: String?, evictionHistory: String?,
income: Int?, isStudent: Bool?, isVerified: Bool?, previousAddress: String?,
school : String?,studentPhotoIDURL: String?,
studentID: String?, reasonForLeaving: String?) -> [String: Any] {
var dictionaryRepresentation = [String: Any]()
dictionaryRepresentation["kEmail"] = email
dictionaryRepresentation["kZipCode"] = zipCode
dictionaryRepresentation["kCity"] = city
dictionaryRepresentation["kState"] = state
dictionaryRepresentation["kCountry"] = country
dictionaryRepresentation["kCreditRating"] = creditRating
dictionaryRepresentation["kPetsAllowed"] = wantsPetFriendly
dictionaryRepresentation["kSmokingAllowed"] = wantsSmoking
dictionaryRepresentation["kWasherDryer"] = wantsWasherDryer
dictionaryRepresentation["kGarage"] = wantsGarage
dictionaryRepresentation["kDishwasher"] = wantsDishwasher
dictionaryRepresentation["kBackyard"] = wantsBackyard
dictionaryRepresentation["kPool"] = wantsPool
dictionaryRepresentation["kGym"] = wantsGym
dictionaryRepresentation["kFirstName"] = firstName
dictionaryRepresentation["kLastName"] = lastName
dictionaryRepresentation["kMonthlyPayment"] = Int(wantedPayment)
dictionaryRepresentation["kID"] = id
dictionaryRepresentation["kBedroomCount"] = Int(wantedBedroomCount)
dictionaryRepresentation["kBathroomCount"] = wantedBathroomCount
dictionaryRepresentation["kBio"] = bio ?? "No bio available"
dictionaryRepresentation["kStarRating"] = starRating
dictionaryRepresentation["kMaritalStatus"] = maritalStatus ?? "Not specified"
dictionaryRepresentation["kCurrentOccupation"] = currentOccupation ?? "No occupation yet"
dictionaryRepresentation["kWithinRangeMiles"] = withinRangeMiles
dictionaryRepresentation["kBankruptcies"] = bankruptcies
dictionaryRepresentation["kCriminalHistory"] = criminalHistory ?? ""
dictionaryRepresentation["kDriversLicenseNumber"] = driversLicenceNum ?? ""
dictionaryRepresentation["kDriversLicensePicURL"] = driversLicensePicURL ?? ""
dictionaryRepresentation["kEvictionHistory"] = evictionHistory ?? ""
dictionaryRepresentation["kIncome"] = income ?? 0
dictionaryRepresentation["kIsStudent"] = isStudent ?? false
dictionaryRepresentation["kIsVerified"] = isVerified ?? false
dictionaryRepresentation["kPreviousAddress"] = previousAddress ?? ""
dictionaryRepresentation["kReasonsForLeaving"] = reasonForLeaving ?? ""
dictionaryRepresentation["kSchool"] = school ?? ""
dictionaryRepresentation["kStudentID"] = studentID ?? ""
dictionaryRepresentation["kStudentPhotoIdURL"] = studentPhotoIDURL ?? ""
return dictionaryRepresentation;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.