• Как защитить Интеллектуальную собственность в telegram?

    doublench21
    @doublench21
    Интересно, как именно ты себе представляешь доступ к коду, внимание, из ТГ?
    Ответ написан
  • Как сделать вывод данных на страницу?

    doublench21
    @doublench21
    Ну что вы реально не видеть что вы пишете? Нет ну неужели сложно это делать в нормальном редакторе, раз так не справляетесь.

    $_POST['delivery_date'] в 9 строке вызывается как функция, а это массив. Почему в проверке выше вы делаете нормально, а в 9 строке надо было придумать велосипед и вызвать как функцию.
    Ответ написан
  • Как отменить данное действие на Iphone?

    doublench21
    @doublench21
    Нет нельзя. Что бы такого эффекта не было, можно задать цвет подложки такой же, какой и сам скролл. Тогда и заметно не будет. Но это если там вообще есть какой-то фон, если там изображение какое, то тут вариантов нет. Да и не понимаю я, что в этом плохого.

    Может тут есть какой костыль: https://stackoverflow.com/questions/8150191/disabl...
    Ответ написан
    Комментировать
  • Как исправить ошибку (optional swift)?

    doublench21
    @doublench21 Куратор тега Swift
    Для начала нужно научится оформлять свой вопрос, а уже после посмотреть на такой забавный момент. Если вы зашли в блок if, то вы уже уверены в том, что ваша опциональная строка содержит значение. Вот только с чего вы взяли, что ваши кракозябра в строке сведётся к числу? Очевидно не сведётся и она и не сводится. Выражение Int(number2!) возвращает nil

    Плюс надо бы вам уже начинать читать про Опциональный биндинг.
    Ответ написан
    4 комментария
  • Macbook pro 2012 или Macbook air 2017?

    doublench21
    @doublench21
    Если у Вас нету другого выбора, КРОМЕ как остаться на Macbook pro 2012, то конечно берите. Если есть возможность взять что-то отличное от Macbook air, можно задуматься.
    Ответ написан
    Комментировать
  • Как заставить работать std::vector в gcc?

    doublench21
    @doublench21
    Какой язык выбран в Xcode для проекта? В macOS нету gcc, есть лишь алиас, который на самом деле clang. Попробуйте скомпилировать в терминале командой clang или g++.
    Ответ написан
  • Не срабатывает dataSource?

    doublench21
    @doublench21 Куратор тега Swift
    Доброго времени суток. Вы меня конечно извините, но вряд ли найдётся герой, который осилит эти шматки кода. Могу лишь дать небольшой совет, если ваша таблица или коллекция не обновляется при вызове перезагрузки, смотреть нужно в соответствующих методах cell for item at.
    Ответ написан
    2 комментария
  • Как преобразовать структуру Firebase в объект swift?

    doublench21
    @doublench21 Куратор тега Swift
    Что из перечисленного списка Вас смущает и Вы не умеете это делать: ?
    • Получить JSON данные через URLSession/Alamofire/FirebaseSDK
    • Использование Codable для преобразования JSON в класс/структуру
    Ответ написан
    2 комментария
  • Как решить ошибку в коле Swift с использованием CocoaPods, Firebase?

    doublench21
    @doublench21 Куратор тега Swift
    Так может потому, что НЕ нужно определять типы входных параметров, если они уже определены в самом методе createUser. Более того, вы определили типы этих параметров не верно.

    5c7d6b050fce6838464701.png
    Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
      // ...
    }


    https://firebase.google.com/docs/auth/ios/start
    Ответ написан
    Комментировать
  • Как передать данные в кастомную ячейку UITableViewCell перед тем, как она будет построена?

    doublench21
    @doublench21 Куратор тега Swift
    Пример из моего проекта. (Код не привожу текстом, ужасный редактор.)

    В делегате:
    5c7bf8b3c0d26725364424.png
    internal override func collectionView(
      _ collectionView: UICollectionView,
        cellForItemAt indexPath: IndexPath
      ) -> UICollectionViewCell
      {
        let cell = collectionView.dequeueReusableCell(
          withReuseIdentifier: CategoriesCollectionViewCell.reuseIdentifier,
          for: indexPath
        ) as! CategoriesCollectionViewCell
    
        let randomIndex = indexPath.item % CategoriesPlaceholder.images.count
    
        cell.configure(
          withImage: UIImage(named: CategoriesPlaceholder.images[randomIndex])!,
          andTitle: CategoriesPlaceholder.titles[randomIndex]
        )
    
        return cell
      }

    Внутри ячейки:
    5c7bf8c1617ce913362365.png
    internal final class CategoriesCollectionViewCell: UICollectionViewCell {
    
     // =====================================
      // MARK: - Configure
      // =====================================
    
      internal func configure(withImage image: UIImage?, andTitle title: String) {
        illustrationCircle.image = image
        self.title.text = title
      }
    Ответ написан
    7 комментариев
  • Deadlcok в swift?

    doublench21
    @doublench21 Куратор тега Swift
    Это справедливо не только для главного потока, НО и для всех последовательных очередей.

    Рассмотрим вот такой пример:
    5c76b22e12b96350728646.png

    Что мы получаем:
    Очевидно, всякая последовательная очередь ждёт выполнения текущей задачи, перед тем как начать выполнять следующую. Когда мы пытаемся СИНХРОННО поставить в очередь текущую задачу, мы получаем блокировку. Это происходит потому, что когда мы выполняем код (3-я строчка), то мы это делаем в рамках текущей, уже выполняющейся в очереди задачи И пытаемся синхронно добавить задачу. Синхронно означает, что мы должны дождаться завершения текущей задачи. Но как мы можем завершить задачу в которой мы находимся, если мы сами её и тормозим? Это и называется взаимной блокировкой. 2-ая строка кода ждёт выполнения 3-ей строки, а 3-я строка ждёт завершения 2-ой. Под строками я понимаю собственно блоки кода, которые мы добавляем в ПОСЛЕДОВАТЕЛЬНУЮ очередь.

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

    Об этом написано у Apple:
    Do not call the dispatch_sync function from a task that is executing on the same queue that you pass to your function call. Doing so will deadlock the queue. If you need to dispatch to the current queue, do so asynchronously using the dispatch_async function.


    Касаемо:
    5c76b5872101c484838312.png
    Будем идти по порядку. Начинаем с #1 - печатаем "a". После выполняем #2. Тут мы АСИНХРОННО добавляем в очередь задачу. Это значит, что мы говорим системе, эй, поставь эту задачу в очередь и верни мне контроль над кодом, я не хочу ждать. Поэтому после #2 тут же выполняется #6. Ведь мы и сказали, что не хотим ждать завершения добавленной задачи. Вот он и вернул управления и продолжил выполнять. То есть вывел символ "d".
    Теперь внутри очереди мы снова добавляем АСИНХРОННО новую задачу в рамках текущей задачи. То есть мы так же говорим, что бы система передала управление обратно и мы не хотим ждать завершения. То есть после добавления задачи мы тут же выполняем строку #5 - выводим символ "c".

    Так как добавить задачу в очередь занимает некоторое время, плюс то время, что тратится на выполнение самой задачи - всё это приводит к тому, что вывод строки #4 пришелся самым последним.

    То есть всё это время мы просили лишь добавить задачи в очередь и продолжить выполнять следующие строчки кода не дожидаясь их завершения. Вот символы "a, d, c" и вывелись раньше символа "b".

    Не знаю как ещё проще объяснить. Может кто поправит меня.
    Ответ написан
    2 комментария
  • Как отобразить snapshot в NavigationController с кастомной AnimateTransition?

    doublench21
    @doublench21 Куратор тега Swift
    Что-то мне подсказывает, что Вы совершенно не понимаете логику переходов между VC и ГЛАВНОЕ в каком контексте это происходит.

    Во-первых: Что за Магическая необходимость заставила вас удалять вью контроллера из которого вы переходите - неясно... А как вы перейдете назад? В никуда.

    Во-вторых: Предоставляете ли вы свой класс анимации, тут Важно, не Контроллеру, к которому переходите, а Навигейшн Контроллеру? Что-то мне подсказывает, нет.

    В-третьих: Вот полностью рабочий вариант. (Рабочий в том смысле, что он делает то, что вы хотите. Опущены проверки)

    5c70127785756462005262.png
    .
    Код текстом
    internal final class ModalAnimator: NSObject, UIViewControllerAnimatedTransitioning {
    
      private var isPresenting: Bool
    
      private let duration: TimeInterval = 3
    
      internal init(isPresenting: Bool) {
        self.isPresenting = isPresenting
      }
    
      internal func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return duration
      }
    
      internal func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        guard let fromVC = transitionContext.viewController(forKey: .from),
          let toVC = transitionContext.viewController(forKey: .to),
          let snapshot = toVC.view.snapshotView(afterScreenUpdates: true)
          else { return }
    
        let containerView = transitionContext.containerView
    
        snapshot.frame = fromVC.view.frame
    
        containerView.addSubview(toVC.view)
        containerView.addSubview(snapshot)
    
        fromVC.view.isHidden = true
    
        UIView.animate(
          withDuration: duration,
          animations: { snapshot.transform = CGAffineTransform(rotationAngle: .pi)},
          completion: { _ in
            fromVC.view.isHidden = false
            snapshot.removeFromSuperview()
            transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
        })
      }
    }
    Ответ написан
  • Мобильная верстка Iphone XS XR X,белые края, что делать?

    doublench21
    @doublench21
    body { 
        background-color: #000000;
    }

    1*PMIqkLB5eH4ceRK57rsdbg.png
    Ответ написан
    Комментировать
  • Как поменять UIViewController внутри модального окна?

    doublench21
    @doublench21 Куратор тега Swift
    Потому-что в нормальном варианте это должно выглядеть следующим образом:

    [MainScreenVC]
    Button1
    ---> present [LogInVC]
    ------> present [NavigationController]
    ---------> push [UserFeedVC]
    Button2
    ---> present [SignInVC]
    ------>present [NavigationController]
    --------->push [UserFeedVC]
    Ответ написан
    Комментировать
  • Как обрабатывать нажатия на SKShapeNode?

    doublench21
    @doublench21 Куратор тега Swift
    Странный вопрос. Вы вроде такие классы юзаете, а про основы совсем либо не знаете либо забыли.

    override func touchesBegan(_ touches: Set, with event: UIEvent?)

    Для определения какая это нода, смотрите св-во name у вашей ноды.
    Ответ написан
  • Почему view's перерисовывается в cell?

    doublench21
    @doublench21 Куратор тега Swift
    class CustomProgressBar: UIView {
        
        var proportion = 1.0 { 
          didSet { invalidateIntrinsicContentSize() }
        }
    
        
        override var intrinsicContentSize: CGSize {
            return CGSize(width: proportion, height: 1.0)
        }
    
    }
    Ответ написан
  • Как использовать данные модели в layoutSubviews?

    doublench21
    @doublench21 Куратор тега Swift
    А что тут думать та?

    frame.width в кастомном view в layoutSubviews

    Что это за набор слов? Зачем?

    2570 = 630 + 440 + 1500

    2570 - 100%
    630 - x
    x = (630 * 100) / 2570 ~ 24.5

    2570 - 100%
    440 - x
    x = (440 * 100) / 2570 ~ 17.1

    2570 - 100%
    1500 - x
    x = (1500 * 100) / 2570 ~ 58.3

    class StackProgressView: UIView {
    
      var proportion = 1.0
    
      override var intrinsicContentSize: CGSize {
        return CGSize(width: proportion, height: 1.0)
      }
    }
    
    let stack = UIStackView(frame: CGRect(origin: .zero, size:CGSize(width: 500.0, height: 20.0)))
        stack.distribution = .fillProportionally
        stack.axis = .horizontal
        stack.spacing = 5.0
    
    let walk = StackProgressView(frame: .zero)
        walk.backgroundColor = UIColor(red: 162.0 / 255.0, green: 221.0 / 255.0, blue: 239.0 / 255.0, alpha: 1.0)
        walk.proportion = 24.5
        walk.layer.allowsEdgeAntialiasing = true
        walk.layer.cornerRadius = 5.0
        walk.layer.maskedCorners = [.layerMinXMinYCorner, .layerMinXMaxYCorner]
    
    let aerobic = StackProgressView(frame: .zero)
        aerobic.backgroundColor = UIColor(red: 69.0 / 255.0, green: 187.0 / 255.0, blue: 223.0 / 255.0, alpha: 1.0)
        aerobic.proportion = 17.1
    
    let run = StackProgressView(frame: .zero)
        run.backgroundColor = UIColor(red: 40.0 / 255.0, green: 112.0 / 255.0, blue: 133.0 / 255.0, alpha: 1.0)
        run.proportion = 58.3
        run.layer.allowsEdgeAntialiasing = true
        run.layer.cornerRadius = 5.0
        run.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMaxXMaxYCorner]
    
    stack.addArrangedSubview(walk)
    stack.addArrangedSubview(aerobic)
    stack.addArrangedSubview(run)


    yoPw0or.png
    Ответ написан
    2 комментария
  • Как решить лимит с запланированными оповещениями?

    doublench21
    @doublench21 Куратор тега Swift
    А кто Вам мешает поставить задачу в бэкграунд и запрашивать даты каждый день в 00:00 скажем и добавлять оповещение? Или скажем запрашивать новые даты с более длительным периодом. Никто же Вас не заставляет в один день устанавливать 200 оповещений. Получайте новые даты и устанавливайте их по мере необходимости. В приложение для этого заходить не нужно.

    Второй вариант использовать EventKit(Календарь, Напоминания). Там вообще лимитов нет.
    Ответ написан
    2 комментария
  • Curl запрос с multipart/form-data?

    doublench21
    @doublench21
    Наверное, потому что нужно было немного погуглить и понять, что у Вас совсем не "multipart/form-data". Миллион примеров в гугле, как можно задавать такие вопросы...
    Ответ написан