小编chr*_*low的帖子

UIView类中addSubview和insertSubview之间的区别

以编程方式添加视图时,addSubviewinsertSubView方法之间的区别是什么?

iphone subview uikit uiview addsubview

83
推荐指数
3
解决办法
6万
查看次数

在RxSwift中处理一次性observable的正确方法

我有一个观察,我只想开始一次.文档说:

使用配置袋或takeUntil操作员是确保清理资源的有效方法.我们建议在生产中使用它们,即使序列将在有限时间内终止.

我的观察结果在一次事件后终止

let observable = Observable.create() { observer in
  webservice.makeHTTPRequestWithCompletionBlock {
    if something {
      observer.on(.Next(...))
      observer.onCompleted()
    } else {
      observer.on(.Error(...))
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

假设我对取消此观察者的订阅者不感兴趣,我只想让它运行一次并完成.我希望这个observable的生命周期在工作本身完成时结束.这意味着我无法看到disposeBag的好候选人.takeUntil也期待一个'事件',而且我看不到好的事件.

现在我只是通过丢弃一次性来解决警告:

_ = observeable.subscribeNext { ... }
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者我应该使用不同的范例?

ios swift rx-swift

18
推荐指数
1
解决办法
8258
查看次数

UITextField使用RxSwift绑定到ViewModel

我愿意使用RxSwift在模型值和视图控制器之间进行MVVM绑定.我想按照这个realm.io教程,但从那时起绑定显然已经改变,示例代码不能编译.这是示例代码,我认为我已经修复了最糟糕的拼写错误/丢失的东西:

LoginViewModel.swift

import RxSwift

struct LoginViewModel {

    var username = Variable<String>("")
    var password = Variable<String>("")

    var isValid : Observable<Bool>{
        return Observable.combineLatest(self.username.asObservable(), self.password.asObservable())
        { (username, password) in
            return username.characters.count > 0
                && password.characters.count > 0
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

LoginViewController.swift

import RxSwift
import RxCocoa
import UIKit

class LoginViewController: UIViewController {
    var usernameTextField: UITextField!
    var passwordTextField: UITextField!
    var confirmButton: UIButton!

    var viewModel = LoginViewModel()

    var disposeBag = DisposeBag()

    override func viewDidLoad() {
        usernameTextField.rx.text.bindTo(viewModel.username).addTo(disposeBag)
        passwordTextField.rx.text.bindTo(viewModel.password).addTo(disposeBag)

        //from the viewModel
        viewModel.rx.isValid.map { $0 } …
Run Code Online (Sandbox Code Playgroud)

mvvm ios swift rx-swift

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

Rxswift observable bind(to :) vs subscribe(onNext :)

抱歉.我很困惑Rxswift中的绑定是什么.据我所知,observable除非观察者订阅了它,否则不会产生价值,例如myObservable.subscribe(onNext: {}).

但是当我阅读以下代码行时:

// in LoginViewModel.swift
init() {
    isValid = Observable.combineLatest(username.asObservable(), password.asObservable()) { (username, password) in
        return !username.isEmpty && !password.isEmpty
    }
}

// in LoginViewController.swift
viewModel.isValid.bind(to: loginButton.rx.isEnabled).disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么isValidObservable能够在不调用subscribe方法的情况下被观察到?
为什么我们可以调用bind(to :) in LoginViewController.swift而不调用类似的东西viewModel.isValid.subscribe(...)

swift rx-swift

17
推荐指数
2
解决办法
6311
查看次数

类型A要求类型B是类型swift 4

以下代码给出了编译错误

'WeakReference'要求'ServiceDelegate'是类类型

protocol ServiceDelegate: AnyObject {
    func doIt()
}

class SomeClass() {
    // compile error occurs in this line
    private var observers = [WeakReference<ServiceDelegate>]()
}
Run Code Online (Sandbox Code Playgroud)

WeakReference代码:

final class WeakReference<T: AnyObject> {

    private(set) weak var value: T?

    init(value: T?) {
        self.value = value
    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?应根据此站点正确声明委托.

到目前为止我尝试了什么:

  • 从更改委托协议的一致性AnyObject,以 class不解决问题.
  • 在干净的操场上试试上面的代码.

swift swift4

16
推荐指数
3
解决办法
2384
查看次数

RxSwift:如何向UILabel添加手势?

我有一个labelisUserInteractionEnabled设置为true.现在,我需要添加UITapGestureRecognizer标签.有没有办法添加Rx方式.

我在这里查看了RxSwift库.他们没有为添加手势提供任何扩展.该UILabel+Rx文件只有textattributedText.

是否有任何解决方法可以添加手势到标签?

ios swift rx-swift rx-cocoa

15
推荐指数
3
解决办法
1万
查看次数

如何在iOS 7.0或更高版本中获得自动调整的字体大小?

我希望在UILabel或UITextField中缩小某些文本的字体大小.这在iOS 7.0之前是可能的:如何获得UILabel(UITextView)自动调整的字体大小?.但是,sizeWithFont已在iOS 7.0中弃用.我已经尝试使用它的替换,sizeWithAttributes,但没有成功.在iOS 7.0中有没有办法做到这一点?

uikit ios

11
推荐指数
3
解决办法
3708
查看次数

UIMarkupTextPrintFormatter使用自定义背景和透明HTML内容创建PDF

我正在使用a UIPrintPageRenderer与a UIMarkupTextPrintFormatter一起打印一个html页面,该页面呈现在UIWebView.我试图实现以下目标:我想将html内容作为透明层渲染到上下文中,但是当使用UIPrintPageRenderer上下文覆盖下面的所有内容进行渲染时,html内容的背景颜色始终为白色.

html样式包含以下代码段:

body {
      background-color: transparent !important;;
      -webkit-print-color-adjust: exact;
}
Run Code Online (Sandbox Code Playgroud)

UIWebView我可以看到html的背景确实是透明的,因为我将背景设置UIWebView为不同的颜色.

这是我用于创建PDF数据的代码:

let printPageRenderer = UIPrintPageRenderer()
let printFormatter = UIMarkupTextPrintFormatter(markupText: htmlContent)
printPageRenderer.addPrintFormatter(printFormatter, startingAtPageAt: 0)

let data = NSMutableData()
UIGraphicsBeginPDFContextToData(data, Constants.Pdf.rect, nil)
let context = UIGraphicsGetCurrentContext()!

for i in 0..<printPageRenderer.numberOfPages {
    UIGraphicsBeginPDFPage()

    let backCoverView = UIView(frame: Constants.Pdf.rect)
    backCoverView.backgroundColor = UIColor(patternImage: UIImage(named: "background.png")!)
    backCoverView.layer.render(in: context)

    context.clear(printableRect)

    printPageRenderer.setValue(NSValue(cgRect: printableRect), forKey: "printableRect")
    printPageRenderer.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
}

UIGraphicsEndPDFContext()
Run Code Online (Sandbox Code Playgroud)

我的问题是通过"background.png"呈现的html内容不透明但具有白色背景.html样式中的透明属性似乎被忽略了UIPrintPageRenderer.将background-color …

html css printing cgcontext swift

11
推荐指数
1
解决办法
1209
查看次数

如何在微服务之间最好地共享和存储类似枚举的数据?

情况:微服务架构具有:

  • 微服务是用 Java 编写的,带有 Spring Boot 和 Hibernate
  • 一个选项服务,它通过 REST 接口提供有关Option的信息
  • 可以如下建模的选项数据,例如通过枚举(代表)
    • 有一些属性,比如enabled与之关联的状态。将来不太可能添加更多属于Option 的属性,这些属性必须与其直接绑定。
    • 很少需要添加新的OptionOptionType。它们永远不会被删除(如果需要,只是禁用)。
    • 一个选项应该有一个可以被引用的唯一标识符
    • 如果可能,应该没有UNKOWN选项
enum OptionType {
   TYPE_A,
   TYPE_B,
   TYPE_C;
}

enum Option {
    TYPE_A_X1(TYPE_A),
    TYPE_A_X2(TYPE_A),

    TYPE_B_Z1(TYPE_B, false),
    TYPE_B_Z2(TYPE_B);

    TYPE_C_U1(TYPE_C);
    TYPE_C_U2(TYPE_C);
    TYPE_C_U3(TYPE_C);

    private final OptionType type;
    private final boolean enabled;

    Option(OptionType type){
        this.type = type;
        this.enabled = true;
    }

    Option(OptionType type, boolean enabled){
        this.type = type;
        this.enabled = enabled; …
Run Code Online (Sandbox Code Playgroud)

java enums microservices

9
推荐指数
2
解决办法
290
查看次数

Swift计算大文件的MD5校验和

我正在为大型视频文件创建MD5校验和.我目前正在使用代码:

extension NSData {
func MD5() -> NSString {
    let digestLength = Int(CC_MD5_DIGEST_LENGTH)
    let md5Buffer = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLength)

    CC_MD5(bytes, CC_LONG(length), md5Buffer)
    let output = NSMutableString(capacity: Int(CC_MD5_DIGEST_LENGTH * 2))
    for i in 0..<digestLength {
        output.appendFormat("%02x", md5Buffer[i])
    }

    return NSString(format: output)
    }
}
Run Code Online (Sandbox Code Playgroud)

但这会产生一个内存缓冲区,对于大型视频文件来说并不理想.在Swift中有没有办法计算读取文件流的MD5校验和,因此内存占用量最小?

checksum md5 ios commoncrypto swift

8
推荐指数
2
解决办法
4980
查看次数