В приведенном выше коде есть несколько ошибок. Я воссоздал решение, которое также содержит изменение ImagePicker.
То, что делает ваш ImagePicker, изменяет @State Image
. Вы показываете это изображение, и будет показано выбранное вами изображение. Здесь все нормально. Однако вы не сможете получить UIImage изображения. Это невозможно, если вы посмотрите на интерфейс класса Image
.
Пусть ваш Image Picker вернет UIImage
Я не уверен, какой ImagePicker вы использовали. Однако вы можете просто изменить версию здесь , чтобы вернуть UIImage
.
. Сохраняет логическое значение, только если отображается imagePicker и UIImage.
@State private var showImagePicker : Bool = false
@State private var image : UIImage?
Каждый раз, когда UIImage изменяется, вы можете обновить свое изображение. Просто используйте:
if (self.image != nil)
{
Image(uiImage: self.image!).resizable().scaledToFit().aspectRatio(contentMode: .fit)
}
Теперь, когда дело доходит до сохранения вашего UIImage в вашей базе данных, вам необходимо преобразовать его в объект данных. Это просто.
Button(action: {
//Not nil
print(self.image)
//PNG Representation as Data
let imageData = self.image!.pngData()
//Data type here --> Data
print(type(of: imageData))
Здесь вы видите, что это из объекта Data
, и данные можно просто сохранить в CoreData.
Единственное, что вам еще нужно исправить, это то, что вы не передают привязку изображения вашему ImagePicker, вместо этого передайте привязку как UIImage.
Будет выглядеть примерно так:
struct CaptureImageView {
@Binding var isShown: Bool
@Binding var image: UIImage?
func makeCoordinator() -> Coordinator {
return Coordinator(isShown: $isShown, image: $image)
}
}
А в didFinishPickingMediaWithInfo
вы просто установите UIImage.
func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let unwrapImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else { return }
imageInCoordinator = unwrapImage
isCoordinatorShown = false
}
Опять же, это не мой ImagePicker. Я просто изменил его, чтобы вы прояснили, что не так и что вам нужно исправить. У меня есть рабочее решение, и это возможно. Просто убедитесь, что вы используете, а не изображение, а не UIImage, чтобы ссылаться на него.