Ответы пользователя по тегу Swift
  • На чем лучше делать серверную часть для мобильного приложения на iOS (SWIFT) и Android (Java)?

    doublench21
    @doublench21 Куратор тега Swift
    Серверная часть и iOS. Повеселили. Какое отношение к серверной части имеет iOS, мб просто Swift, эмм? А если по делу, то наверное серверную часть не пишут ни на одном из этих языков. Java - забыть как страшный сон(ИМХО). Swift тема крутая, + на Линкусе без проблем крутится, но он пока молод. На сервер его ещё рано. Не вся основная библиотека(Foundation) переделана от привязки к obj-c runtime. Пишите на том, на чём пишут все: NodeJS, Php, Ruby, Python.
    Ответ написан
  • Как сделать выезжающее из-под uitextfield оповещение?

    doublench21
    @doublench21 Куратор тега Swift
    Ну наверно как-то так, хотя за правильность я не ручаюсь.
    import UIKit
    
    class ViewController: UIViewController {
        @IBOutlet weak var textField: UITextField!
        private var substrateView = UIView()
        private var substrateLabel = UILabel()
        private var constraint = NSLayoutConstraint()
    
        @IBAction func someAction(_ sender: Any) {
            substrateView.isHidden = false
            UIView.animate(withDuration: 0.3) { [unowned self] in
                self.constraint.isActive = false
                self.constraint = self.substrateView.heightAnchor.constraint(equalToConstant: 60)
                self.constraint.isActive = true
                self.view.layoutIfNeeded()
            }
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            textField.layer.borderWidth = 3
            textField.layer.borderColor = UIColor(red: 233/255, green: 128/255, blue: 129/255, alpha: 1).cgColor
            textField.layer.cornerRadius = 8
    
            substrateView.backgroundColor = UIColor(red: 233/255, green: 128/255, blue: 129/255, alpha: 1)
            substrateView.layer.cornerRadius = 8
    
            substrateLabel.text = "Login is not valid"
            substrateLabel.textAlignment = .center
            substrateLabel.textColor = UIColor.white
            substrateLabel.backgroundColor = UIColor.clear
    
            substrateView.addSubview(substrateLabel)
    
            substrateLabel.translatesAutoresizingMaskIntoConstraints = false
            substrateLabel.frame = CGRect.zero
            substrateLabel.sizeToFit()
            substrateLabel.bottomAnchor.constraint(equalTo: substrateView.bottomAnchor).isActive = true
            substrateLabel.centerXAnchor.constraint(equalTo: substrateView.centerXAnchor).isActive = true
    
            view.addSubview(substrateView)
    
            substrateView.translatesAutoresizingMaskIntoConstraints = false
            substrateView.topAnchor.constraint(equalTo: textField.topAnchor).isActive = true
            substrateView.leftAnchor.constraint(equalTo: textField.leftAnchor).isActive = true
            substrateView.rightAnchor.constraint(equalTo: textField.rightAnchor).isActive = true
            substrateView.widthAnchor.constraint(equalTo:textField.widthAnchor).isActive = true
    
            constraint = substrateView.heightAnchor.constraint(equalTo: textField.heightAnchor)
            constraint.isActive = true
    
            textField.layer.zPosition = 1
            substrateView.isHidden = true
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }


    Вышло как-то так:
    giphy.gif
    Конечно сам action выберешь такой какой тебе нужен. На гифке - вызывается просто по нажатию.
    Ответ написан
    5 комментариев
  • Как сделать тень в uitextfield разную с двух сторон?

    doublench21
    @doublench21 Куратор тега Swift
    Достаточно просто. Нужно делать через свойство UIView.layer.shadowPath.
    import UIKit
    
    @IBDesignable
    class ViewController: UIViewController {
    
        @IBOutlet weak var textField: UITextField!
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            textField.layer.shadowColor = UIColor.purple.cgColor
            textField.layer.cornerRadius = 8
    
            textField.layer.masksToBounds = false
            textField.layer.shadowOffset = CGSize.zero
            textField.layer.shadowRadius = 3.0
            textField.layer.shadowOpacity = 0.7
    
            let path = UIBezierPath()
            path.move(to: CGPoint(x: 0.0, y: 0.0))
            path.addLine(to: CGPoint(x: textField.bounds.size.width/2, y: textField.bounds.size.height/2))
            path.addLine(to: CGPoint(x: textField.bounds.maxX, y: 0.0))
            path.addLine(to: CGPoint(x: textField.bounds.maxX, y: textField.bounds.maxY))
            path.addLine(to: CGPoint(x: 0.0, y: textField.bounds.maxY))
            path.close()
            textField.layer.shadowPath = path.cgPath
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }

    Вышло так:
    beVqPQ2jSguwZ8-Vva6S9w.jpg
    Путь использовал такой:
    VIBE4c0dTAuFQXiDfhoLPA.jpg
    Тебе остаётся для лучшего качества сделать скажем такой путь:
    WmsQS6asSLenTPqh9GKKRQ.jpg
    Или более извилистый путь, если ты хочешь уменьшить глубину тени слева и справа.
    Ответ написан
    Комментировать
  • 'subscript' is unavailable: cannot subscript String with an Int, see the documentation comment for discussion Swift 4?

    doublench21
    @doublench21 Куратор тега Swift
    Потому-что у строк нету привычного индекса типа Int. Связанно это с Unicode скалярами. Нужно делать как-то так:
    let greeting = "Guten Tag!"
    greeting[greeting.startIndex]
    // G
    greeting[greeting.index(before: greeting.endIndex)]
    // !
    greeting[greeting.index(after: greeting.startIndex)]
    // u
    let index = greeting.index(greeting.startIndex, offsetBy: 7)
    greeting[index]
    // a
    Ответ написан
    Комментировать
  • Как добавить заголовок в запросы внутри WKWebView?

    doublench21
    @doublench21 Куратор тега Swift
    There will not be any difference between loading web view from loadRequest vs loadHTMLString method, shouldStartLoadWithRequest method will be called in both cases. You can override your headers there and add header as per your requirements.
    Ответ написан
  • Как в ios слушать смену сети?

    doublench21
    @doublench21 Куратор тега Swift
    Слава богу в iOS такого делать нельзя!
    Вот здесь пишется, что можно делать в background:
    Declaring Your App’s Supported Background Tasks
    https://developer.apple.com/library/content/docume...
    Ответ написан
    Комментировать
  • Регулярные выражения в Swift?

    doublench21
    @doublench21 Куратор тега Swift
    Swift 4 Xcode 9.0
    import Foundation
    
    // Дополним String для простоты работы с NSRegularExpression
    extension String {
        // Вычислимое св-во, которое возвращает NSRange строки String
        var toNSRange: NSRange { return NSMakeRange(0, self.utf16.count) }
    
        // Метод возвращающий String по заданному NSRange
        func substringFromNSRange(with nsrange: NSRange) -> String? {
            guard let range = Range(nsrange) else { return nil }
            let start = String.UTF16Index(encodedOffset: range.lowerBound)
            let end = String.UTF16Index(encodedOffset: range.upperBound)
            return String(self.utf16[start..<end])
        }
    }
    
    var htmlContext = "products_and_categories(123123)]}"
    let regExp = try? NSRegularExpression(pattern: "products_and_categories(.*?)\\]\\}")
    let matches = regExp?.matches(in: htmlContext, range: htmlContext.toNSRange)
    for match in matches! {
        print(htmlContext.substringFromNSRange(with: match.range)!)
    }
    Ответ написан
    1 комментарий
  • Можно ли создать Telegram-бота, используя Swift, и разумно ли это?

    doublench21
    @doublench21 Куратор тега Swift
    Да, конечно можно! А о разумности, давай подумаем. Очевидно, после разработки этот код должен будет работать на каком-то Linux based сервере и вот тут могут возникнуть проблемы. Дело в том, что под Linix, основной фреймворк Swift - Foundation, ещё не полностью портирован. Отсюда могут возникнуть некоторые проблемы, в частности не полностью реализованный URLSession Class.

    P.S. Swift - это очень круто, но он очень молод и поэтому на сервера его пока рано ставить, в виду проблем указанных выше.
    P.P.S. Но для развития навыков Swift на macOS - да конечно, проблем в написании такого бота не возникнет. Welcome как говорится...
    Ответ написан
    Комментировать