2017-01-16 3 views
0

Я создаю словарь в быстром и она принимает очень много времени (20 мин), чтобы скомпилироватьКомпиляция Swift проблемы исходных файлов с созданием словаря

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 
    } 

} 

Я проверил это, и я знаю, что это создание этого словаря, потому что я попытался удалить половину словаря, и он компилируется намного быстрее. Есть ли у кого-нибудь советы о том, как ускорить это?

ответ

1

Назначение буквального значения для словаря является ошибкой в ​​текущих версиях Swift и может вызвать проблемы с компиляцией. Быстрое обходное решение - избегать литералов и делать это долгий путь.

var dictionaryRepresentation = [String: Any]() 
    dictionaryRepresentation[key1] = value1 
    dictionaryRepresentation[key2] = value2 
    ... 

Он генерирует больше кода, но компилируется очень быстро.

Дает полный пример кода, который компилирует очень быстро таким образом ... Я уверен, что вы можете изменить свой собственный код, так же ...

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; 
} 
Смежные вопросы