将 sqlclient.h 转换为 swift



我正在尝试使用 swift SQLClient.h 访问 SQL Server 已经在使用类 我访问类,但我无法将 objective-c 代码转换为 swift。原始代码是这样的:

SQLClient* client = [SQLClient sharedInstance];
client.delegate = self;
[client connect:@"server:port" username:@"user" password:@"pass" database:@"db" completion:^(BOOL success) {
    if (success)
    {
      [client execute:@"SELECT * FROM Users" completion:^(NSArray* results) {
        for (NSArray* table in results)
          for (NSDictionary* row in table)
            for (NSString* column in row)
              NSLog(@"%@=%@", column, row[column]);
        [client disconnect];
      }];
    }
}];

谁能做出一个快速?.我做不到。我在完成时遇到错误

我得到了这个:

var client = SQLClient((

client.delegate = self
client.connect("172.29.XX.XX:1433", username: "XX", password: "XXXX", database: "XXX", completion: {(success:Bool) -> Void in

    if success
        {
            client.execute("SELECT * FROM Users" , completion: {(results:NSArray) ->  Void in
                for (table:NSArray in results)
                for (row:NSDictionary in table)
                for (column:NSString in row)
                    NSLog(@"%@=%@", column, row[column])
            client.disconnect
            } )
        }

})

谢谢

几个观察结果:

  1. 在你的 Objective-C 代码示例中,你使用的是单例,所以我假设你也应该在 Swift 代码中这样做:

    let client = SQLClient.sharedInstance()
    

    您也可以使用 let 代替 var 。始终支持不变性而不是可变性。仅在您需要可变的地方使其可变。

  2. 您的for循环:

    • 需要牙套

    • 不过,不需要for循环表达式周围的括号

    • Swift 中字典的for循环返回一个包含键和值的元组(在 Objective-C 中它只是键(

  3. 当你调用disconnect时,这是一个函数,所以我会包含()

  4. 如果需要,您可以使用NSLog,但在 Swift 中我们经常使用 println .printf但是,我们通常使用字符串插值(例如 "value = (variable)" variable的值将插入该字符串的位置。

  5. 作为一个次要的观察,我倾向于采用尾随闭包语法(它摆脱了那些completion参数,转换为函数之后的闭包(并使用隐含类型来清理代码示例。

将它们

放在一起,会产生如下结果:

let client = SQLClient.sharedInstance()
client.delegate = self
client.connect("172.29.XX.XX:1433", username: "XX", password: "XXXX", database: "XXX") {
    success in
    if success {
        client.execute("SELECT * FROM Users") {
            results in
            for table in results as NSArray {
                for row in table as NSArray {
                    for column in row as NSDictionary {
                        println("(column.key) = (column.value)")
                    }
                }
            }
            client.disconnect()
        }
    }
}

或者,可能是这样的:

let client = SQLClient.sharedInstance()
client.delegate = self
client.connect("172.29.XX.XX:1433", username: "XX", password: "XXXX", database: "XXX") {
    success in
    if success {
        client.execute("SELECT * FROM Users") {
            results in
            for table in results as [[[String:AnyObject]]] {
                for row in table {
                    for (columnName, value) in row {
                        println("(columnName) = (value)")
                    }
                }
            }
            client.disconnect()
        }
    }
}
class ViewController:  UIViewController,SQLClientDelegate

func error(error: String, code: Int32, severity: Int32) {
    println(error)
}

sharedInstance()是一个anyObject,你必须将client设置为SQLclient才能将 de delegate 设置为 self:

let client = SQLClient.sharedInstance() as! SQLClient

相关内容

  • 没有找到相关文章

最新更新