Skip to content

Commit

Permalink
[TMP] Try to resolve race condition
Browse files Browse the repository at this point in the history
  • Loading branch information
Blackjacx committed Jul 11, 2024
1 parent d080685 commit b028294
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 33 deletions.
26 changes: 23 additions & 3 deletions Sources/Columbus/ColumbusMain.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,34 @@
import Foundation

// swiftlint:disable:next convenience_type
public final class ColumbusMain {
public static let countriesJsonUrl = Bundle.module.url(
public actor ColumbusMain {
private let countriesJsonUrl = Bundle.module.url(
forResource: "Countries",
withExtension: "json"
)

static func layoutConstraintId(_ suffix: String) -> String {
func layoutConstraintId(_ suffix: String) -> String {
// swiftlint:disable:next force_unwrapping
"\(Bundle.module.bundleIdentifier!).\(suffix)"
}

func createCountries() -> CountryList {
guard let fileUrl = countriesJsonUrl else {
return CountryList()
}

let filePath = if #available(iOS 16.0, *) {
fileUrl.path()
} else {
fileUrl.path
}

guard let data = FileManager.default.contents(atPath: filePath) else {
return CountryList()
}

let decoder = JSONDecoder()
return (try? decoder.decode(CountryList.self, from: data)) ?? CountryList()
}

}
14 changes: 8 additions & 6 deletions Sources/Columbus/CountryCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,23 +65,25 @@ final class CountryCell: UITableViewCell {
}

func setupAutoLayout() {
let main = ColumbusMain()

separatorHeight = separator.heightAnchor.constraint(equalToConstant: 0)
separatorHeight?.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).separatorHeight")
separatorHeight?.identifier = main.layoutConstraintId("\(type(of: self)).separatorHeight")

let separatorBottom = separator.bottomAnchor.constraint(equalTo: bottomAnchor)
separatorBottom.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).separatorBottom")
separatorBottom.identifier = main.layoutConstraintId("\(type(of: self)).separatorBottom")

let leading = countryView.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor)
leading.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).leading")
leading.identifier = main.layoutConstraintId("\(type(of: self)).leading")

let trailing = countryView.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor)
trailing.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).trailing")
trailing.identifier = main.layoutConstraintId("\(type(of: self)).trailing")

let top = countryView.topAnchor.constraint(equalTo: contentView.layoutMarginsGuide.topAnchor)
top.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).top")
top.identifier = main.layoutConstraintId("\(type(of: self)).top")

let bottom = countryView.bottomAnchor.constraint(equalTo: contentView.layoutMarginsGuide.bottomAnchor)
bottom.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).bottom")
bottom.identifier = main.layoutConstraintId("\(type(of: self)).bottom")

NSLayoutConstraint.activate([
leading,
Expand Down
31 changes: 7 additions & 24 deletions Sources/Columbus/CountryPickerViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ public final class CountryPickerViewController: UIViewController {

public typealias DidSelectCountry = (_ country: Country) -> Void

private static let main = ColumbusMain()

/// The list of data displayed in the data source
public static let countries = createCountries()
public static let countries = main.createCountries()

/// The configuration for the country picker
let config: Configurable
Expand Down Expand Up @@ -204,19 +206,19 @@ public final class CountryPickerViewController: UIViewController {
var constraints: [NSLayoutConstraint] = []

tableViewBottomConstraint = table.bottomAnchor.constraint(equalTo: view.bottomAnchor)
tableViewBottomConstraint.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).tableView.bottom")
tableViewBottomConstraint.identifier = Self.main.layoutConstraintId("\(type(of: self)).tableView.bottom")
constraints.append(tableViewBottomConstraint)

let tableLeading = table.leadingAnchor.constraint(equalTo: view.leadingAnchor)
tableLeading.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).tableView.leading")
tableLeading.identifier = Self.main.layoutConstraintId("\(type(of: self)).tableView.leading")
constraints.append(tableLeading)

let tableTrailing = table.trailingAnchor.constraint(equalTo: view.trailingAnchor)
tableTrailing.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).tableView.trailing")
tableTrailing.identifier = Self.main.layoutConstraintId("\(type(of: self)).tableView.trailing")
constraints.append(tableTrailing)

let tableTop = table.topAnchor.constraint(equalTo: view.topAnchor)
tableTop.identifier = ColumbusMain.layoutConstraintId("\(type(of: self)).tableView.top")
tableTop.identifier = Self.main.layoutConstraintId("\(type(of: self)).tableView.top")
constraints.append(tableTop)

NSLayoutConstraint.activate(constraints)
Expand Down Expand Up @@ -285,25 +287,6 @@ public final class CountryPickerViewController: UIViewController {
#endif
}

private static func createCountries() -> CountryList {
guard let fileUrl = ColumbusMain.countriesJsonUrl else {
return CountryList()
}

let filePath = if #available(iOS 16.0, *) {
fileUrl.path()
} else {
fileUrl.path
}

guard let data = FileManager.default.contents(atPath: filePath) else {
return CountryList()
}

let decoder = JSONDecoder()
return (try? decoder.decode(CountryList.self, from: data)) ?? CountryList()
}

// MARK: - Filtering

/// Returns `true` if search controller is active and query is non-empty
Expand Down

0 comments on commit b028294

Please sign in to comment.