SwiftUI — PersonNameComponents() Не может быть инициализирован переменными

#ios #swift #swiftui

#iOS #swift #swiftui

Вопрос:

Я использую Xcode версии 12.0.1 (12A7300)

Я скачал этот код от Apple, чтобы протестировать создание монограммы с использованием PersonNameComponents.

https://developer.apple.com/documentation/foundation/formatter/displaying_human-friendly_content

Я создал новый проект в Xcode, чтобы переделать Monogram.swift из кода Apple.

Моя проблема в том, что я не могу инициализировать PersonNameComponents с помощью переменных в моем проекте, но он отлично работает в проекте Apple. Даже если я скопирую класс и вставлю его в свой проект, я получу сообщение об ошибке.

Ошибка компилятора: «Аргумент передан вызову, который не принимает аргументов». скриншот ошибки компилятора

 struct Monogram_Previews: PreviewProvider {
static var previews: some View {
    VStack {
        let sampleName = PersonNameComponents(familyName: "मिश्र", givenName: "करन")
        Monogram(nameComponents: sampleName, color: .orange)
            .padding(.bottom, 20)
        Monogram(nameComponents: sampleName, color: .blue, sideLength: 100)
            .padding(.bottom, 20)
        Monogram(nameComponents: sampleName, color: .pink, sideLength: 250)
    }
}
  

}

Спасибо.

Ответ №1:

Ошибка довольно очевидна PersonNameComponentsFormatter , у нее нет инициализаторов, которые не принимают аргументов. Вероятно, вы забыли включить в свой проект пользовательский init, указанный в NamesView.swift файле:

 extension PersonNameComponents {
    init(namePrefix: String? = nil,
         familyName: String? = nil,
         middleName: String? = nil,
         givenName: String? = nil,
         nameSuffix: String? = nil,
         nickname: String? = nil,
         phoneticRepresentation: PersonNameComponents? = nil) {
        self.init()
        self.namePrefix = namePrefix
        self.familyName = familyName
        self.middleName = middleName
        self.givenName = givenName
        self.nameSuffix = nameSuffix
        self.nickname = nickname
        self.phoneticRepresentation = phoneticRepresentation
    }
}