小编Kha*_*yen的帖子

在Swift 2.2中替换C风格的循环

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,但它有点混乱.有时候这种循环很有用.

有什么想法吗?

用例

  1. 您需要枚举数组的所有元素,但最后一个元素除外.
  2. 你需要枚举小数范围内的所有整数,但是范围可以是[0.5,0.9],所以没有整数(在一些数学之后),这导致一个空循环.

ios swift

8
推荐指数
2
解决办法
4419
查看次数

Swift的等同协议一致性检查

我试图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> …

ios swift

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

在 swift 2 中使用 UnsafeMutablePointer 和 CFRunLoopObserverContext

我有以下代码

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)

cfrunloop swift xcode7

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

使用nodejs/socket.io和wscat获取"socket hang up"

我有以下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)

感谢帮助!

websocket node.js socket.io

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

如何在XCode中运行Watch App

我创建了一个手表应用程序,遵循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)

但是在模拟器的屏幕上没有任何反应.

objective-c ios apple-watch watchkit

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

使用while循环切换到C

我是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)

c while-loop switch-statement

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