当此调用包装在另一个方法中时,有没有办法等待异步调用完成?
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
我有一些问题在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)
有人有想法吗?
我从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中编写新的字符.
有人有想法吗?
android ×1
async-await ×1
base64 ×1
image ×1
ios ×1
objective-c ×1
swift ×1
uitextfield ×1
unit-testing ×1