Swift 2 Playground (Xcode 7 Beta 4). Несколько типов в массиве работают только при импорте UIKit?

Я пробовал массивы Swift на игровой площадке, когда заметил это странное поведение.

Приведенный ниже код работает нормально.

import UIKit

var array = [1,2,3,"Booyaa"]

Но, как только я удалю строку "import UIKit" из игровой площадки, я получаю следующую ошибку

Ошибка выполнения игровой площадки: /var/folders/tx/tvyf1r314wj9371f491qx8wjbqbgsr/T/./lldb/11708/playground71.swift:2:17: ошибка: «Int» не может быть преобразован в «IntegerLiteralConvertible» var array = [1, 2, 3 , "Бояа"]

Почему это происходит?


person kkaosninja    schedule 02.08.2015    source источник
comment
swift2 это заноза в заднице, мальчик!   -  person sriram hegde    schedule 02.08.2015
comment
Нет, нет необходимости. Это нужно import Foundation.   -  person Long Pham    schedule 03.08.2015
comment
@longpham Не могли бы вы объяснить подробнее?   -  person kkaosninja    schedule 03.08.2015


Ответы (2)


Правильный ответ здесь, в ответ на идентичный вопрос, который я разместил на форумах Apple Dev => https://forums.developer.apple.com/message/35389

Это связано с тем, что массивы Swift могут содержать только объекты одного типа. В вашем массиве есть целые числа и строка. Когда вы импортируете UIKit, объекты в массиве становятся объектами типа NSObject благодаря механизму вывода Swift. Чтобы убедиться в этом, добавьте строку после определения массива, вы увидите тип Swift.array.

import UIKit  
var array = [1,2,3,"Swift2"]  
array.dynamicType 
person kkaosninja    schedule 26.09.2015

С высоким языком программирования требуется lexical structure для проверки и сравнения сложного типа в качестве вашего вопроса. И это реализовано в Foundation фреймворке.

Также UIKit реализовал некоторые UI API как UIView и т.д... А в UIKit фреймворке нужно использовать Foundation фреймворк.

Кстати: Foundation фреймворк — это основной язык Swift, Objective-C.

Надеюсь это поможет!

person Long Pham    schedule 03.08.2015