2015-11-30 3 views
2

У меня есть пользовательский ввод текста и ввод изображения пользователя. Я не уверен, будет ли пользователь вводить значение или нет для любого из них, и поэтому я хочу убедиться, что эти вещи не являются обязательными. Разрешить ввод текста в формате nil было достаточно просто. Я сделал мои условия по желанию, как такПозволяет пользователю вводить значения nil с опциями Swift

@IBOutlet weak var AskText: UITextView? 

У меня возникает очень трудное время, однако, делая такие термины, как это необязательный:

let imageData = UIImageJPEGRepresentation(((self.UploadHiddenImage!.image))!, 0.5) 

Я очень вынужден положить, что «!» в конце. Он не принимает, например:

let imageData = UIImageJPEGRepresentation(((self.UploadHiddenImage?.image))?, 0.5) 

Теперь после прочтения вокруг, я нахожусь под впечатлением, что «необязательно связывание» и «если позволить» заявления будет мой выход. Мне сложно понять их в этом контексте, поскольку они относятся к относительно сложному заявлению, вроде моего.

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

Edit:

Вот еще некоторые детали для контекста

let imageData = UIImageJPEGRepresentation(((self.UploadHiddenImage!.image))!, 0.5) 
    let parseImageFile = PFFile(name:"ask_image.jpeg", data: imageData!) 

мне нужно это в дополнительных условиях в случае, если пользователь вводит ничего.

ответ

0

· Если вы используете раскадровку, сделать ImageView unoptional как

@IBOutlet weak var UploadHiddenImage: UIImageView! 

· Затем разворачивать образ ImageView

var parseImageFile: PFFile? 
if let image = UploadHiddenImage.image, 
    imageData = UIImageJPEGRepresentation(image, 0.5) { 
    parseImageFile = PFFile(name:"ask_image.jpeg", data: imageData) 
} 

//use the parseImageFile with if let 
if let parseImageFile = parseImageFile { 
} 

//or 
parseImageFile? 
+0

В моих целях это метод, который сработал. Я использовал первый абзац, а затем сохранил в своей базе данных как parseImageFile. Я не использовал другие два утверждения. Спасибо всем за разговор и за ZHZ за решение? –

2

Ваше изображение не является обязательным. UIImageJPEGRepresentation не принимает дополнительный вход изображения. Таким образом, вы используете! чтобы принудительно развернуть необязательный параметр и передать необязательный аргумент UIImageJPEGRepresentation.

Однако это не лучший подход, потому что если ваш self.UploadHiddenImage!.image равен nil, ваше приложение выйдет из строя.

Вы должны использовать if let myImage = self.UploadHiddenImage!.image as? UIImage { } или даже лучше в быстрой 2,0 guard let myImage = self.UploadHiddenImage!.image as? UIImage else { } так что этот код работает только, если ваш uploadHiddenImage.image не является нулевым.

+0

'guard' нуждается в возврате o r break, поэтому он может оказаться нецелесообразным во всех сценариях. – GoodSp33d

+1

Действительно. Но это самый элегантный вариант, если его метод/функция не имеет никакого смысла в выполнении каких-либо дальнейших действий, когда изображение «nil». –

+0

guard let imageData = self.UploadHiddenImage! .image as? UIImage else {} дает мне ошибку, в которой говорится, что «downcast от UIImage?» UIImage только разворачивает варианты. Вы имели в виду использовать «!»? » –

0

У вас есть несколько вариантов в зависимости от вашей версии Swift и того, как вы хотите, чтобы ваш код выглядел.

Если у вас есть Swift 2, самым элегантным вариантом будет использование инструкции охраны.

guard let image = self.UploadHiddenImage?.image else { 
    return // or handle nil some other way 
} 

let imageData = UIImageJPEGRepresentation(image, 0.5) 
let parseImageFile = PFFile(name:"ask_image.jpeg", data: imageData) 

Вы также можете использовать, если позволить заявление:

if let image = self.UploadHiddenImage?.image { 
    let imageData = UIImageJPEGRepresentation(image, 0.5) 
    let parseImageFile = PFFile(name:"ask_image.jpeg", data: imageData) 
} 
+0

Опция if let не работает. Когда я перехожу к загрузке в базу данных позже в скрипте, мне говорят, что parseImageFile - это неразрешенный идентификатор. Когда я использую метод защиты, моя программа разрешена для запуска, но возврат не является тем, что я хочу сделать, если входной файл равен нулю. Я просто хочу, чтобы пустая ячейка данных вводила мою базу данных. Вместо этого возврат в основном перезагружает экран. Что я могу использовать для отправки пустой ячейки данных в мою таблицу в базе данных, когда ввод равен нулю? –

+0

Если вы хотите использовать метод if let и все еще доступны переменные из-за пределов области видимости, вам нужно сделать объявление var varData перед областью if let, чтобы он по-прежнему был доступен позже. Что касается проблемы охраны, просто измените обратную линию, чтобы сделать то, что вы хотите, например, как вы сказали, добавить пустую ячейку в вашу базу данных, а затем вернуться раньше. –

Смежные вопросы