小编Pau*_*aul的帖子

Swift:ViewModel应该是一个结构还是类?

我试图在我的新项目中使用MVVM模式.第一次,我创建了我的所有视图模型到struct.但是当我使用闭包实现异步业务逻辑(如fetchDataFromNetwork)时,闭包会捕获旧的视图模型值,然后更新到那个.不是新的视图模型值.

这是操场上的测试代码.

import Foundation
import XCPlayground

struct ViewModel {
  var data: Int = 0

  mutating func fetchData(completion:()->()) {
    XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
    NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: "http://stackoverflow.com")!) {
      result in
      self.data = 10
      print("viewModel.data in fetchResponse : \(self.data)")
      completion()
      XCPlaygroundPage.currentPage.finishExecution()
      }.resume()
  }
}

class ViewController {
  var viewModel: ViewModel = ViewModel() {
    didSet {
      print("viewModel.data in didSet : \(viewModel.data)")
    }
  }

  func changeViewModelStruct() {
    print("viewModel.data before fetch : \(viewModel.data)")

    viewModel.fetchData {
      print("viewModel.data after fetch : \(self.viewModel.data)")
    }
  }
}

var c = ViewController()
c.changeViewModelStruct() …
Run Code Online (Sandbox Code Playgroud)

struct closures mvvm swift

14
推荐指数
1
解决办法
4080
查看次数

移动和网络的现场音频(无线电)流媒体的最佳协议是什么?

我正在尝试为互联网广播电台建立一个网站和移动应用程序(iOS,Android).网站用户播放他们的音乐或广播,移动用户只需收听广播电台并与其他听众聊天.

我搜索了一周,使用Wowza引擎(使用HLS和RTMP)和Amazon EC2上的SHOUTcast服务器制作原型.

使用HLS有5秒的延迟,但RTMP和SHOUTcast有2秒的延迟.有了这个结果,我想我应该选择RTMP或SHOUTcast.

但我不确定RTMP和SHOUTcast是最好的协议.:(

我应该选择什么协议?我是否需要提供涵盖所有平台的各种协议?

audio streaming protocols shoutcast internet-radio

6
推荐指数
1
解决办法
2万
查看次数

动画 UITextView 导致动画时文本消失

我正在尝试通过更改变换来为 UITextView 制作动画。但它会使文本在动画时消失。这是我的测试代码。

class ViewController: UIViewController {
    let textView = UITextView()

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        textView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(textView)
        
        textView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        textView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        textView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        textView.heightAnchor.constraint(equalToConstant: 300).isActive = true
        textView.backgroundColor = .systemOrange
        textView.text = "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
        textView.textColor = .white

        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            let animator = UIViewPropertyAnimator(duration: 2, curve: .easeInOut, animations:  {
                self.textView.transform = CGAffineTransform(translationX: 0, y: 1000)
            })
            animator.startAnimation()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

演示

我尝试使用故事板,但结果是相同的。当我使用UIView.animate方法时,结果相同。

为什么会出现这种情况?我想用文字来制作动画。

更新

let contraint = …
Run Code Online (Sandbox Code Playgroud)

animation uitextview ios swift

5
推荐指数
1
解决办法
584
查看次数