账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Swift 4 数组debug打印print的结果是数字?
    72
    0

    swift小白
    我现在做的是对一个已有的本地数据库"data.s3db"查询的app。

    已经使用FMDB库,现在的问题是,输出的数组print后为0x60000013edc0这样的数字……是编码方式不对吗?
    1.这是模型scoreModel.swift

    import Foundation
    import UIKit
    class scoreModel: NSObject {
        var lessonName:String = String()
        var lessonCode:String = String()
        var creditPoint:Double = Double()
        var totalStudentNumber:Int = Int()
        var teacherName:String = String()
        var semesterName:String = String()
        var scoreValue:String = String()
        var studentCount:Int = Int()
    }
    

    2.这是数据库管理类SQLiteManager.swift

    import Foundation
    import UIKit
    class SQLiteManager: NSObject {
        // 0. 将类设计成单例
        static let shareInstance : SQLiteManager = SQLiteManager()
        override init()  {
            super.init()
        }
        // 1. 保存数据库队列对象
        var dbQueue : FMDatabaseQueue?
        // 2. 打开数据库
        func openDB () {
            //2.1 设置数据库的路径;
            let dbPath = Bundle.main.path(forResource:"data", ofType: "s3db")
    
            //2.2 创建数据库
            dbQueue = FMDatabaseQueue(path: dbPath)
        }
    
        // 3. 查询数据库,并将数据以数组的形式返回:
        func queryDB(sql: String) -> NSMutableArray {
            openDB ();
            // 3.1 创建可变数组
            let resultArray = NSMutableArray()
    
            // 3.2 执行sql
            SQLiteManager.shareInstance.dbQueue?.inDatabase { (db) in
                let dbResult: FMResultSet! = db.executeQuery(sql, withArgumentsIn:[])
    
                // 遍历结果
                while dbResult.next() {
                    let model:scoreModel = scoreModel()
                    model.lessonName = String(dbResult.string(forColumn: "lessonName")!)
                    model.lessonCode = String(dbResult.string(forColumn: "lessonCode")!)
                    model.creditPoint = Double(dbResult.double(forColumn: "creditPoint"))
                    model.semesterName = String(dbResult.string(forColumn: "semesterName")!)
                    model.teacherName = String(dbResult.string(forColumn: "teacherName")!)
                    model.totalStudentNumber = Int(dbResult.int(forColumn: "totalStudentNumber"))
                    model.scoreValue = String(dbResult.string(forColumn: "scoreValue")!)
                    model.studentCount = Int(dbResult.int(forColumn: "studentCount"))
                    // 添加到可变数组
                    resultArray.add(model)
                }
            }
            return resultArray
        }
    }
    

    3.这是操作页面ViewController.swift,SQL语句已经经过SQLiteStudio检验,我选了“%C%”为条件。

    override func viewDidLoad() {
            super.viewDidLoad()
            //准备sql语句
            let mysql = "SELECT Lesson.lessonName,Lesson.lessonCode, Lesson.creditPoint, Course.totalStudentNumber, Teacher.name AS teacherName, Semester.name AS semesterName, Score.scoreValue, Score.studentCount FROM (Lesson INNER JOIN Course ON Lesson.id = Course.lesson_id) LEFT JOIN Score ON Course.id = Score.course_id LEFT JOIN Teacher ON Course.teacher_id = Teacher.id LEFT JOIN Semester ON Course.semester_id = Semester.id WHERE Lesson.lessonName like '%C%' ORDER BY Semester.name desc"
            let resultArray = SQLiteManager.shareInstance.queryDB(sql:mysql)
            print(resultArray) 
        }
    

    输出结果为:

    "<test.scoreModel: 0x600000135400>",
    "<test.scoreModel: 0x604000135c20>",
    "<test.scoreModel: 0x604000135cc0>",
    "<test.scoreModel: 0x604000135d60>",
    "<test.scoreModel: 0x604000135e00>",
    "<test.scoreModel: 0x604000135ea0>",
    "<test.scoreModel: 0x604000135f40>",
    "<test.scoreModel: 0x604000135fe0>",
    

    一脸蒙蔽……

    用SQLiteStudio进行语句查询的结果都是正常的啊,类似

    高等数学C(下)    MATH120006.01    4    70    29    杭国明    2010~2011学年第2学期    A    4
    
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 敬往事一杯酒 普通会员 1楼

      在 Swift 4 中,数组的 debug 是一个选项,用于在程序运行时输出调试信息。如果你想要在数组中打印元素的值,你可以使用 debugPrint 方法。

      例如:

      ```swift let array = [1, 2, 3, 4, 5]

      debugPrint(array)

      // 输出:[1, 2, 3, 4, 5] ```

      在这个例子中,debugPrint 方法将数组中的每个元素打印到控制台。因此,你可以在调试时看到数组中的元素值。

      注意,debugPrint 方法是线程安全的,这意味着它不会在多个线程中共享同一个数组。如果你需要在多个线程中共享同一个数组,你可能需要使用其他方法,例如使用 async/await 和 .await 关键字,或者使用一个闭包来实现同步。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部