小编chr*_*r0x的帖子

转义闭包捕获变异的“self”参数

我正在尝试订阅由combineLatest, after生成的可观察值flatMap。如果我在结构中运行此代码,则会收到此错误:

Escaping closure captures mutating 'self' parameter

如果我更改为类,则不会发生错误。我知道使用 struct 我无法异步改变结构的状态,但是,在这种情况下,我实际上没有改变它,或者是吗?

还有另一种方法可以在不使用类的情况下修复它吗?

public struct ViewModel {

    let disposeBag = DisposeBag()
    var relay1: PublishRelay<()>
    var relay2: PublishRelay<()>

    init() {
        relay1 = PublishRelay<()>()
        relay2 = PublishRelay<()>()

        Observable.combineLatest(relay1, relay2)
            .filter { tuple in 1 == 1 } // some boolean logic here
            .flatMap { _ in return Observable<Void>.just(()) } // some map filter here
            .subscribe(onNext: { _ in
                self.doCoolStuff()
            }).disposed(by: disposeBag)
    }

    func doCoolStuff() {
        // Do cool Stuff …
Run Code Online (Sandbox Code Playgroud)

swift rx-swift

8
推荐指数
1
解决办法
5579
查看次数

如何基于注释属性创建自定义验证消息?

我正在使用 Hibernate @NotNull 验证器,并且我正在尝试创建自定义消息来告诉用户哪个字段在为空时生成了错误。像这样的东西:

notNull.custom = The field {0} can't be null.
Run Code Online (Sandbox Code Playgroud)

(这将位于我的 ValidationMessages.properties 文件中)。

其中 {0} 应该是传递给验证器的字段名称,如下所示:

@NotNull(field="field name")
Run Code Online (Sandbox Code Playgroud)

我有什么办法可以做到这一点吗?

java validation hibernate

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

如何使用 Alamofire + RxSwift 同步刷新访问令牌

我的fetchData()NetworkManager 类中有这个通用函数,它能够向网络发出授权请求,如果它失败(经过多次重试)会发出一个错误,该错误将重新启动我的应用程序(请求新的登录)。我需要同步调用这个重试令牌,我的意思是,如果多个请求失败,一次应该只有一个请求刷新令牌。如果一个失败,另一个请求必须被丢弃。我已经尝试了一些使用 DispatchGroup / NSRecursiveLock / 以及调用描述波纹管的函数 cancelRequests 的方法(在这种情况下,任务计数始终为 0)。我怎样才能使这种行为在这种情况下起作用?

  • 我的网络管理器类:

    public func fetchData<Type: Decodable>(fromApi api: TargetType,
                                           decodeFromKeyPath keyPath: String? = nil) -> Single<Response> {
        
        let request = MultiTarget(api)

        return provider.rx.request(request)
                .asRetriableAuthenticated(target: request)
    }

    func cancelAllRequests(){
        if #available(iOS 9.0, *) {
            DefaultAlamofireManager
                .sharedManager
                .session
                .getAllTasks { (tasks) in
                tasks.forEach{ $0.cancel() }
            }
        } else {
            DefaultAlamofireManager
                .sharedManager
                .session
                .getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in
                    
                sessionDataTask.forEach { $0.cancel() }
                uploadData.forEach { $0.cancel() }
                downloadData.forEach { $0.cancel() }
            }
        } …
Run Code Online (Sandbox Code Playgroud)

swift alamofire rx-swift moya

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

使用 python 和 .pem 文件通过 SCP 进行文件传输的最佳方法

我想在 python 中复制该命令:

scp -i aKey.pem aFile.txt ec2-user@serverIp:folder
Run Code Online (Sandbox Code Playgroud)

我找到了一些 SCP 示例,但没有发现既不使用 .pem 密钥也不通知用户密码。我怎样才能在python中做到这一点?

python ssh scp

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

如何使用JavaScript在图像中应用水印?

我正在使用angularJS,需要通过调用JS函数在图像中以编程方式应用水印。我所拥有的是:

<figure><img class="watermark" ng-src="{{applyWatermark(img.url)}}"></figure>  
Run Code Online (Sandbox Code Playgroud)

因此,我需要调用该函数applyWatermark(尚未实现)并返回带有水印的img,但是我不确定如何构建此函数。它应该返回图像吗?有人可以给我一些例子,我该怎么做?

编辑:

我这样做了,但是没有用:

 $(function applyWatermark(image) {                                                                                                                                                                                                      
     watermark([image, 'watermark.png'])                                                                                                                       
       .image(watermark.image.lowerRight())                                                                                                                                                                                              
       .then(function (img) {                                                                                                                                                                                                            
           return img                                                                                                                                                                                                                    
       });                                                                                                                                                                                                                               
 })  
Run Code Online (Sandbox Code Playgroud)

任何的想法?

javascript

4
推荐指数
1
解决办法
7178
查看次数

如何在自定义约束验证器中使用注释元素

我在我的项目中编写了一个名为 CGC 的自定义注释:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = CGCValidator.class)
public @interface CGC {
    String message() default "{person.cgc.error}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    boolean canBeNull() default false;

    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
    @Retention(RUNTIME)
    @Documented
    public @interface List {
        CGC[] value();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个使用注释的验证器类,基本上,作为我的第一次验证,我想检查该字段是否为空,但前提是该字段的注释已将“canBeNull”元素指定为 true (@CGC(canBeNull="true "))。我的问题是:如何访问验证器类中的 canBeNull 元素?

*验证器应该是这样的:

public class CGCValidator implements ConstraintValidator<CGC, String> {

    @Override
    public void initialize(CGC annotation) {
    }

    @Override
    public boolean isValid(String cgc, …
Run Code Online (Sandbox Code Playgroud)

java validation annotations

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

仅使用Swift 4 Codable解码JSON数据中的数组

我正在使用Swift 4,Codable并且正在从Web服务接收以下JSON:

{
    "status": "success",
    "data": {
        "time": "00:02:00",
        "employees": [
            {
                "id": 001,
                "name": "foo"
            }, 
            {
                "id": 002,
                "name": "bar"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我只想将employee数组解码为员工对象(time属性将仅保存一次),但是没有任何效果。
我读了很多有关Swift 4的资料,Codable但不知道如何解码该数组。

编辑:我的员工班级:

import Foundation

struct Employee: Codable {
    var id: Int
    var time: Date

    enum CodingKeys: String, CodingKey {
        case id = "id"
        case time = "time"
    }
}
Run Code Online (Sandbox Code Playgroud)

要求:

  Alamofire.SessionManager.default.request(Router.syncUsers)
            .validate(contentType: ["application/json"])
            .responseJSON { response in
                if response.response?.statusCode == 200 {
        guard let jsonDict = response as? …
Run Code Online (Sandbox Code Playgroud)

swift swift4 codable

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

在C++上的std :: set中查找和更新自定义对象

我在我的项目中创建了2个自定义结构,每个结构都有一个std :: set.

struct Subject {
        std::string name;
        std::set<SubjectFrame> frames;

        Subject(std::string subject_name);

        void AddFrame(SubjectFrame &frame);

        bool operator<(const Subject &rhs) const { return (name  < rhs.name);}
        bool operator==(const Subject &rhs) const { return (name == rhs.name);}
};

struct Dataset {
        std::set<Subject> subjects;
        std::map<int, std::vector<Subject> > classification_groups;

        Dataset(const std::string ds_path);

        void AddSubject(Subject &subject);
        void GetDSFromFileSystem(const std::string dataset_path);
        void GetClassificationGroups(int number_of_groups_to_create);
};
Run Code Online (Sandbox Code Playgroud)

每次我想在我的设置'帧'中添加一些帧我都会调用这个函数:

void Dataset::AddSubject(Subject &subject) {
        set<Subject>::iterator it = this->subjects.find(subject);
        if (it != this->subjects.end()) {
                for (Subject fr : this->subjects) {
                        it->AddFrame(fr); …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

0
推荐指数
1
解决办法
131
查看次数