在Objective-C中,它很简单:
NSLog(@"%@", [@"BAÑO" lowercaseString]); // Outputs "baño".
Run Code Online (Sandbox Code Playgroud)
在C++中,什么是等价的?任何人都可以为此提供产生相同输出的有效代码吗?有没有一个很好的STL方式来做到这一点,而不依赖于ICU,Boost或任何其他第三方库?
我目前的非解决方案是:
using namespace std;
string s = "BAÑO";
wstring w(s.begin(), s.end());
transform(w.begin(), w.end(), w.begin(), towlower);
// w contains "baÑo"
Run Code Online (Sandbox Code Playgroud) 任何人都可以解释为什么我的插页在Ormlite中花了这么长时间?在桌面上的一个sqlite事务中执行1,700次插入只需不到一秒钟.但是,当使用Ormlite for Android时,它需要大约70秒,我可以在调试消息中看到每个插入.
当我尝试将插入包装到一个事务中时,它以完全相同的速度运行.我知道Android和Ormlite都有开销,但是,我不希望它那么棒.我的代码如下:
this.db = new DatabaseHelper(getApplicationContext());
dao = db.getAddressDao();
final BufferedReader reader = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.poi)));
try {
dao.callBatchTasks(new Callable<Void>() {
public Void call() throws Exception {
String line;
while ((line = reader.readLine()) != null) {
String[] columns = line.split(",");
Address address = new Address();
// setup Address
dao.create(address);
}
return null;
}
});
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 出于某种原因,我没有收到错误消息.(我在这里简化了代码以直截了当.)
// Send an error message
_loginButton.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendError:error]; // Pretend this is a real error
return nil;
}];
}];
// Subscribe to loginButton's returned signal
[_loginButton.rac_command.executionSignals subscribeNext:^(RACSignal *loginSignal) {
[loginSignal subscribeError:^(NSError *error) {
NSLog(@"A");
} completed:^{
NSLog(@"B");
}];
}];
Run Code Online (Sandbox Code Playgroud)
这打印"B".知道为什么吗?如果-sendError:在订户上调用,为什么完成块会收到它?
我想影响多个属性,并且还有一个活动的命令UIButton.
我试图推断最佳方法,但可以使用一些输入.
这是我有的:
// Listen for changes on the textfields, alter the button UI state
[[RACSignal
combineLatest:@[ _usernameField.rac_textSignal,_passwordField.rac_textSignal]
reduce:^id(NSString *username, NSString *password) {
BOOL valid = [username length] >= 4 && [password length] >= 4;
_loginButton.enabled = valid;
_loginButton.alpha = valid ?: 0.65;
return nil;
}] subscribeCompleted:^{}];
// Listen for taps
_loginButton.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
NSLog(@"Tap");
return [RACSignal empty];
}];
Run Code Online (Sandbox Code Playgroud)
这有效,但我很乐意听到任何建议.
我正在尝试监听位置更新和错误(通过CLLocationManagerDelegate),并支持跟踪错误但从最终信号中过滤掉并保持活动的能力.
当我订阅位置信号(通过ReactiveCocoaPlayground -[LocationManager currentLocationSignal])时,收到的任何错误都将结束信号.
我试过-catch:和-catchTo:,但这些只是赶上一个错误,然后结束的信号.
我已经尝试在里面返回一个全新的信号实例-catch:,但是那时THAT信号的错误没有被捕获(这导致RAC()后来的绑定崩溃).
我也试过了一个递归方法来捕获这个问题,导致堆栈溢出(可能我只是犯了一个错误).
next错误发生后有没有办法接收?
使用ReactiveCocoa 2.0,是否有更好的方法来执行以下操作,而无需实现/取消实现,并且仍然能够从3个信号中的任何一个捕获错误,而无需重复代码?
有3个登录按钮.每个返回对应于异步"登录"API调用的信号.完成后,它们将返回用户对象,错误和/或完成.
// Login signals
_loginButton.rac_command = [[RACCommand alloc] initWithEnabled:loginValid signalBlock:^RACSignal *(id input) {
return [[API doLogin:_usernameField.text password:_passwordField.text] materialize];
}];
_fbLoginButton.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [[API doFacebookLogin] materialize];
}];
_twLoginButton.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [[API doTwitterLogin] materialize];
}];
// Login response from any of the 3 signals
[[RACSignal
merge:@[_loginButton.rac_command.executionSignals,
_fbLoginButton.rac_command.executionSignals,
_twLoginButton.rac_command.executionSignals]]
subscribeNext:^(RACSignal *loginSignal) {
RACSignal * s = [loginSignal dematerialize];
[s subscribeNext:^(User *x) {
NSLog(@"user: %@", x);
} error:^(NSError *error) { …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,其中Retrofit库正在识别方法而不是它的注释.它报告了上面标题中的错误消息.
(背景:我正在使用SBT sbt-android-plugin和Retrofit 1.6.1)
我的代码是这样的:
private trait MyService {
@GET("/api/test")
def test(): Observable[Any]
}
object MyService {
private val restAdapter = new RestAdapter.Builder().setEndpoint("http://somewhere").build()
val service = restAdapter.create(classOf[MyService])
service.test().subscribe(/* you get the idea */) // This line throws a RuntimeException with message in title above
}
Run Code Online (Sandbox Code Playgroud)
GitHub周围散布着一个非常类似的例子,显然来自Reactive原则课程,例如这里.我只想说,我的设置是一样的.
当我单步执行时RestMethodInfo.parseMethodAnnotations(),requestMethod变量确实为null,requestType即SIMPLE.如果我将@FormUrlEncoded注释添加到我的测试方法,requestType仍然设置为SIMPLE.
关于可能导致这种情况的任何想法?