小编Geo*_*rge的帖子

Swift 如何测试封装在函数中的异步调用

当此调用包装在另一个方法中时,有没有办法等待异步调用完成?

class Owner{
   let dataManager = MockDataManager()
   var data: String? = nil

   func refresh() {
        Task {
            self.data = await dataManager.fetchData()
        }
    }
}

class MockDataManager {
    var testData: String = "test"
    func fetchData() async -> String {
       testData
    }
}

class OwnerTests: SKTestCase {
    private var owner = Owner()
    
    func testRefresh() {
        owner.refresh()
        XCTAssertEqual(owner.data, "test") // fail. the value is still nil
    }
}
Run Code Online (Sandbox Code Playgroud)

通过回调,如果引擎盖下的所有内容都被同步调用替换,则测试可以正常工作,但这里看起来我缺少一个等待更改的操作owner.data

unit-testing async-await swift

7
推荐指数
2
解决办法
3645
查看次数

Android调整大图像的大小已收到base64字符串

我有一些问题在android中调整图像大小.我有一个base64字符串(我没有文件或网址,只有字符串),到目前为止,我尝试解码它时,我得到一个内存不足的异常.

public String resizeBase64Image(String base64image){

    byte [] encodeByte=Base64.decode(base64image,Base64.DEFAULT); //out of memory exception...

    BitmapFactory.Options options=new BitmapFactory.Options();
    options.inPurgeable = true;
    Bitmap image = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length,options);

    image = Bitmap.createScaledBitmap(image, IMG_WIDTH, IMG_HEIGHT, false);

    ByteArrayOutputStream baos=new  ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.PNG,100, baos);
    byte [] newbytes=baos.toByteArray();

    return Base64.encodeToString(newbytes, Base64.DEFAULT);

}
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

base64 android image bitmapfactory

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

reactivecocoa true shouldChangeCharactersInRange textfield等效

我从reactiveCocoa开始,我在UITextfield上遇到了一些麻烦.我尝试对textField进行基本检查,只显示4位数.

我尝试遵循这个例子:http: //nshipster.com/reactivecocoa/但在这里,shouldChangeCharactersInRange始终为true,因此文本字段始终更新.

我试过2个解决方案:

[RACSignal combineLatest:@[self.pinDigitField.rac_textSignal]
 reduce:^(NSString *pinDigit) {
       NSCharacterSet *numbersOnly =[NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
       NSCharacterSet *characterSetFromTextField = [NSCharacterSet characterSetWithCharactersInString:pinDigit];

return @([numbersOnly isSupersetOfSet:characterSetFromTextField] && text.length < 5);
                                                  }];
Run Code Online (Sandbox Code Playgroud)

还有这个

[[self.pinDigitField.rac_textSignal
  filter:^BOOL(id value) {
      NSString *text = value; 
      NSCharacterSet *numbersOnly = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
      NSCharacterSet *characterSetFromTextField = [NSCharacterSet characterSetWithCharactersInString:text];

      BOOL stringIsValid = [numbersOnly isSupersetOfSet:characterSetFromTextField] && text.length < 5 ;return stringIsValid;
  }]subscribeNext:^(id x) {
      NSLog(@"valid");
  }];
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都不能简单地不在UITextfield中编写新的字符.

有人有想法吗?

objective-c uitextfield ios reactive-cocoa

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