2015-11-11 2 views
0

Я рассмотрел другие вопросы здесь о подписи со словарями, и я не видел ничего такого, что вполне соответствовало бы моему сценарию. Возможно, я все еще слишком новичок в Swift, чтобы понять это, но в любом случае это мой сценарий. Я получаю типичный не словарь «Подстрочный» с строкой типа. Я видел сообщения здесь о том, что это необязательно, и нужно его разворачивать, однако, когда я это пробую, Xcode предлагает удалить я!, Поэтому я делаю это, тогда я получаю ошибку подстрочного индекса.Swift 2.0 Проблемы с подзаголовком с помощью словаря

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

Вот что я имею в ViewController, который НЕ работает.

var validFields:Dictionary = ["loanBalanceInput":false,"cashOutInput":false,"appraisedValueInput":false,"interestRateInput":false] 

func validationSuccess(sender:UITextField){ 
      sender.backgroundColor = green 
     switch sender { 
      case loanBalanceInput: 
       validFields["loanBalanceInput"] = true 
       break 
      default: 
      break 
    } 
} 

Что я сделал это создать словарь строк, которые относятся к TextFields и их статус проверки для отслеживания ли они или не были подтверждены. Концепция заключается в том, что когда все в словаре истинно, я могу активировать кнопку расчета.

Однако я получаю «не может индексировать значение словаря типа с индексом типа строки» ошибка ... Однако этот код на детской площадке работает ...

var validatedFields:Dictionary = ["loanBalanceInput":false,"cashOutInput":false,"appraisedValueInput":false,"interestRateInput":false] 
validatedFields["loanBalanceInput"] 
validatedFields["loanBalanceInput"] = true 

Я не понимаю, что здесь. Это потому, что это необязательно?

@IBOutlet weak var loanBalanceInput: UITextField! 

Я не разворачиваю его в своем коммутаторе? Я не пытаюсь получить значение creditBalanceInput, хотя, я просто проверяю, был ли он отправителем.

+0

Обычно декларация словаря требует также типа содержащихся ключей и значений, таких как 'var validFields: Dictionary = ...', но поскольку компилятор может вывести тип, просто удалите аннотацию. – vadian

+0

О, WTF. Я идиот. Я все еще не понимаю, почему он работает на игровых площадках, но это не проблема. Я позволяю ему выводить тип, и это сработало. Благодаря! – Ashapiro75

+0

Если вы хотите добавить свое предложение в качестве ответа, я могу его принять. Спасибо. – Ashapiro75

ответ

0

Обычно Swift Dictionary декларации необходимо также тип вмещающих ключей и значений, как

var validFields: Dictionary<String,Bool> = [" ... 

но компилятор может определить тип просто удалить аннотацию.

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