Comments 12
Честно говоря, сомнительная статья. Особенно глаз зацепился за следующее
Как связана безопасность и возможность фиксить ошибки во время выполнения? И, кстати, я не понимаю что автор имел в виду под фиксами во время выполнения.
Кортеж это просто группировка значений и программист для собственного удобства может дать этим значениям имена, причем может дать их даже не всем, например, let a = (a: 1, 2, c:3) (другой вопрос что так лучше не делать), а может и наоборот к именованным переменным по номеру обращаться, так что никакого разделения на два типа по факту нет.
Безопасная платформа — компилируйте и фиксите ошибки прямо во время написания кода.
Как связана безопасность и возможность фиксить ошибки во время выполнения? И, кстати, я не понимаю что автор имел в виду под фиксами во время выполнения.
В Swift два вида кортежей.
Кортеж это просто группировка значений и программист для собственного удобства может дать этим значениям имена, причем может дать их даже не всем, например, let a = (a: 1, 2, c:3) (другой вопрос что так лучше не делать), а может и наоборот к именованным переменным по номеру обращаться, так что никакого разделения на два типа по факту нет.
Про безопасность видимо имеется ввиду, что ошибки выявляются на этапе написания/компиляции, а не рантайма.
Ну так много кто выявляет ошибки на этапе компиляции/написания, даже для plain c ворнинги (которые легко превращаются в ошибку через -werror) посыпятся если попытаться, например, в указатель на double прокинуть указатель на int. Правда, я тут слазил в оригинал и там Safer т.е. платформа не «безопасная», а просто «безопаснее» [чем Obj-C] с чем сложно спорить и это косяк перевода
Уровни доступа зря перевели.
Эх, были бы у меня такие вопросы на всех собеседованиях, давно бы в Facebook работал
Прекрасно!
Что бы пройти тестирование — надо зарегистрироваться, оставить свою почту, так сказать.
А потом оказывается, что надо ещё и оставить свой номер телефона.
Что бы пройти тестирование — надо зарегистрироваться, оставить свою почту, так сказать.
А потом оказывается, что надо ещё и оставить свой номер телефона.
Не мог не зарегистрироваться ради разъяснений. inout не равно передаче по ссылке. Это заблуждение пошло людям с сишным бэкграундом. В си передача по ссылке изменила бы исходный объект. В Свифте inout не изменит объект до выхода из функции, а просто перезапишет при передаче управления. В официальном же учебнике про это в гонках памяти рассказано.
Меня заинтересовал ваш комментарий и я решил проверить, накидал в плейграунде вот такой пример:
Вывод:
Как видите, строка «After sem1 signal a = 4» выводится до выхода из функции quad, но тем не менее там a уже равно 4. Либо я вас не правильно понял, либо же вы что-то не то написали
import Foundation
let sem1 = DispatchSemaphore(value: 0)
let sem2 = DispatchSemaphore(value: 0)
func quad(_ a: inout Int) {
print("Into function quad")
a = a * a
print("Internal a = \(a)")
sem1.signal()
sem2.wait()
print("Return from quad")
}
var a = 2
print("Initial a = ", a)
DispatchQueue.global().async {
quad(&a)
}
sem1.wait()
print("After sem1 signal a = ", a)
sem2.signal()
DispatchQueue.global().asyncAfter(deadline: .now() + 1.0) {
print("Final a = ", a)
}
Вывод:
Initial a = 2
Into function quad
Internal a = 4
After sem1 signal a = 4
Return from quad
Final a = 4
Как видите, строка «After sem1 signal a = 4» выводится до выхода из функции quad, но тем не менее там a уже равно 4. Либо я вас не правильно понял, либо же вы что-то не то написали
Sign up to leave a comment.
Интервью — 10 вопросов про Swift. Часть 1