Swift 2.2弃用了C风格的循环.但是在某些情况下,新的范围运算符不起作用.
for var i = 0; i < -1; ++i { ... }
Run Code Online (Sandbox Code Playgroud)
和
for i in 0..<-1 { ... }
Run Code Online (Sandbox Code Playgroud)
后者将在运行时失败.我可以用一个包裹循环if,但它有点混乱.有时候这种循环很有用.
有什么想法吗?
用例
我试图Array用以下函数扩展Swift的类:
func containsObjectIdenticalTo(obj: T) -> Bool {
// objectPassingTest returns the first object passing the test
return objectPassingTest { x in x == obj }
}
Run Code Online (Sandbox Code Playgroud)
显然,这不会编译,因为编译器还不知道是否==为类型实现T.然后我将代码更改为此
func containsObjectIdenticalTo(obj: T) -> Bool {
return objectPassingTest {
x in
assert(x is Equatable && obj is Equatable)
return (x as Equatable) == (obj as Equatable)
} != nil
}
Run Code Online (Sandbox Code Playgroud)
哪个也不起作用,因为Equatable无法检查一致性(因为Equatable没有定义@obj)!
有什么想法吗?如果有一些方法可以直接断言,如果T符合Equatable,但是我没有在任何地方读过它会很好.在这些东西中,Swift似乎没有Obj-C那么动态.
更新:
尝试了这个建议,它不起作用(不知道究竟是什么<T: Equatable> …
我有以下代码
private func addRunLoopObserverForSaving() {
var _self = self
withUnsafeMutablePointer(&_self) { (pSelf) -> Void in
var observerContext = CFRunLoopObserverContext(
version: 0,
info: pSelf,
retain: nil,
release: nil,
copyDescription: nil)
withUnsafeMutablePointer(&observerContext, { (pObserverContext) -> Void in
let observer = CFRunLoopObserverCreate(
kCFAllocatorDefault,
CFRunLoopActivity.BeforeTimers.rawValue,
true,
0,
{ (observer, activity, context) -> Void in
guard context != nil else { return }
let pObserverContext = UnsafeMutablePointer<CFRunLoopObserverContext>(context)
let pGraphsModel = UnsafeMutablePointer<GraphsModel>(pObserverContext.memory.info)
let z = pGraphsModel.memory
...
},
pObserverContext
)
CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode)
})
}
} …Run Code Online (Sandbox Code Playgroud) 我有以下nodejs Web套接字服务器
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(8000);
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
console.log("Listening on 8000");
Run Code Online (Sandbox Code Playgroud)
尝试连接时使用 wscat
wscat -c ws://localhost:8000/
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
error: Error: socket hang up
Run Code Online (Sandbox Code Playgroud)
它在浏览器中使用以下javascript工作得很好
var socket = io.connect('http://localhost:8000');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
我创建了一个手表应用程序,遵循Apple的指南,但不知道如何在模拟器中运行它.
当我选择Watch App方案并运行它时,会出现iPhone模拟器,我可以看到WatchKit扩展程序正在运行,dumbing一些日志
2014-11-19 13:28:56.991 WatchApp WatchKit Extension[61833:6371439] <WatchApp_WatchKit_Extension.InterfaceController: 0x7b652010> init
2014-11-19 13:28:56.992 WatchApp WatchKit Extension[61833:6371439] <WatchApp_WatchKit_Extension.InterfaceController: 0x7b652010> will activate
Run Code Online (Sandbox Code Playgroud)
但是在模拟器的屏幕上没有任何反应.
我是C编程的新手.我写了一个简单的开关案例,但没有按预期执行.有人可以告诉我这里有什么问题吗?
#include <stdio.h>
int main() {
int i;
char yes;
bool flag = true;
while(flag) {
printf("Enter the value");
scanf("%d",&i);
switch(i) {
case 1:
printf("Hi");
break;
case 2:
printf("Hello");
break;
}
printf("Enter Y or N to continue");
scanf("%c",&yes);
if (yes == 'N') {
flag = false;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期待的结果是:
Enter the Value
1
Hi
Enter Y or N to continue
Y
Enter the Value
2
Hello
Enter Y or N to continue
N
Run Code Online (Sandbox Code Playgroud)
但我得到的结果是:
Enter the value …Run Code Online (Sandbox Code Playgroud) ios ×3
swift ×3
apple-watch ×1
c ×1
cfrunloop ×1
node.js ×1
objective-c ×1
socket.io ×1
watchkit ×1
websocket ×1
while-loop ×1
xcode7 ×1