簡體   English   中英

創建字典會編譯Swift源文件

[英]Compiling Swift source files issue with creating dictionary

我正在快速創建字典,編譯時間很長(20分鍾)

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
    }

}

我已經對其進行了測試,並且知道它是本詞典的創建,因為我嘗試刪除了一半的詞典,並且編譯速度更快。 有人對如何加快速度有一些提示嗎?

在當前版本的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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM