• mail
Home
  • Produkte
    • myPDCA - In Rekordzeit zum ISMS
    • mySMS Störungsmanagement
    • myEDM Zählerdaten und Verbräuche
    • myPERSONAL Zeiterfassung
    • myPERSONAL Zutrittssytem
    • Berlin Uhr
    • IT-Sicherheit mit Sophos
    • Ihre Firewall mit UTM
    • IP-Telefonie
    • Starface
    • Beispiele
    • IT-Security und Comfort-Telefonie für KMU

FileManager: Liste aller Dateien im Verzeichnis und aller Unterverzeichnisse

extension String {

 

    func listAllFilesInSubAndDirectory() -> NSMutableArray {

        let path = self

        

        //interne Function

        func dirList(path: String, list:NSMutableArray) {

            let fileManager = FileManager.default

            var isDir : ObjCBool = false

            //prüfen, ob vorhanden und ein Directory

            if fileManager.fileExists(atPath: path, isDirectory:&isDir) {

                //file exist

                if isDir.boolValue {

                    // file is a directory

                    do {

                        //list a directory

                        let contentsList = try fileManager.contentsOfDirectory(atPath: path)

                        //alle Elemente der Liste auf directorys untersuchen

                        //das geht am besten, in dem sich die Funktion selbst aufruft. Das ist dann die REKURSION

                        for element in contentsList {

                            let subPath = "\(path)/\(element)"

                            dirList(path: subPath, list: list)

                        }

                        

                    } catch {

                        log.msg("Error while enumerating files \(path): \(error.localizedDescription)")

                    }

                    

                } else {

                    // file is not a directory

                    // .DS_Store soll nicht mit ausgegeben werden

                    if path.isSubstring(substring: ".DS_Store") == false {

                        //Ergebnis in den Pointer schreiben

                        list.add(path)

                    }

                } //end if isDir.boolValue

            } //end if fileManager.fileExists

        }// func dirList

        

        let list = NSMutableArray()

        dirList(path: path, list: list)

        return list

    }

 

}

 

 

Beispiel:    

log.msg("DirDist: \("/Users/karsten/Documents/TestLib".listAllFilesInSubAndDirectory())")

 

Ergebnis:

    "/Users/karsten/Documents/TestLib/A3/B1/C1/File4.pdf",

    "/Users/karsten/Documents/TestLib/A2/B2/File3.pdf",

    "/Users/karsten/Documents/TestLib/A2/B1/File2.pdf",

    "/Users/karsten/Documents/TestLib/File0.pdf",

    "/Users/karsten/Documents/TestLib/A1/File1.pdf"

enum Quellcode: lesbarer gestalten

//Definition:

 

  enum sections: Int {

        case DEVICEdata         = 0

        case COUNTERdata    = 1

        case READINGTEXT     = 2

        case READINGNOTES = 3

    }

 

//Anwendungsbeispiel:

 

   override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        

        switch indexPath.section {

        case sections.DEVICEdata.rawValue:

            return 200

            

        case sections.COUNTERdata.rawValue:

            return 120

            

        case sections.READINGTEXT.rawValue:

            return 64

            

        case sections.READINGNOTES.rawValue:

            return 46

            

        default:

            return 0

        }

 

    }

 

NSAlert auf Button reagieren

        let alert = NSAlert()

        alert.messageText = "Löschen?"

        alert.informativeText = "Soll \("irgend etwas") aus der Datenbank gelöscht werden?"

        alert.addButton(withTitle: "Abbrechen")

        alert.addButton(withTitle: "Ja")

        //alert.addButtonWithTitle("Don't Save")

        let result = alert.runModal()

        switch(result) {

        case NSAlertFirstButtonReturn:

            log.msg("Cancel")

 

        case NSAlertSecondButtonReturn:

            log.msg("Yes")

            

        case NSAlertThirdButtonReturn:

            log.msg("...")

        default:

            break

        }

NSTableView aktualisieren und Reselect auf aktuelle Position

 

 extension NSTableView {

    

    func selectRow(at index: Int) {

        //Zeile im NSTableView selektieren

        selectRowIndexes(.init(integer: index), byExtendingSelection: false)

        if let action = action {

            perform(action)

        }

        //Selektierte Zeile in den sichtbaren Bereich des Views scrollen

        scrollRowToVisible(index)

    }

    

    func refresh(){

        //Tabelleninhalt aktualisieren und Reselect des selektierten Datensatzes

        if selectedRow >= 0 {

            let myRow = selectedRow

            reloadData()

            selectRow(at: myRow)

        } else {

            reloadData()

        }

    }

    

    func refresh(at index: Int){

        //Der Tabelleninhalt wird aktualisiert

        //Ist der index>=0 soll der Datensatz mit dem Index selektiert werden. Meistens nach einem neuen Datenbankdatensatz nach insert. Der Index muß zuvor ermittelt werden

        //gibt es keinen neuen Datensatz, wird der zuvor selektierte Datensatz wieder selektiert. Ist kein Datensatz selektiert, wird nur der Tabelleninhalt aktualisiert

        if index>=0 {

            reloadData()

            selectRow(at: index)

        } else {

            if selectedRow >= 0 {

                let myRow = selectedRow

                reloadData()

                selectRow(at: myRow)

            } else {

                reloadData()

            }

        }

    }

    

}

Aufruf der Funktion im Beispiel

let sqlResult = sqlCube.execute("insert into Table ... ", commit: true)

 

if sqlResult.lastId>0 {

    for (index, record) in sqlResult.result.enumerated() {

        //Datenfeld PK ist die lastId

        if ((record as! NSMutableDictionary)["PK"] as! String).int() == sqlResult.lastId {

            tableTarifgebiete.refresh(at: index)

        }

    }

} else {

    tableTarifgebiete.refresh()

}

Floats formatiert und gerundet als String ausgeben

 

 extension Float {

     

    func roundToString(digits: Int, roundingMode: CFNumberFormatterRoundingMode, numberStyle: CFNumberFormatterStyle ) -> String? {

        //formatierte Ausgabe von Zahlen 

        let formatter = NumberFormatter()

        formatter.roundingMode = NumberFormatter.RoundingMode(rawValue: UInt(roundingMode.hashValue))!

        formatter.numberStyle  = NumberFormatter.Style(rawValue: UInt(numberStyle.hashValue))!

        formatter.maximumFractionDigits = digits

        formatter.minimumFractionDigits = digits

        formatter.minimumIntegerDigits = 1

        

        return formatter.string(from: self as NSNumber)

    }

 

}

Aufruf der Funktion und Ausgabe in der Konsole:

let t: Float = 1234.2355678

log.msg("Ausgabe: \(t.roundToString(digits: 2, roundingMode: CFNumberFormatterRoundingMode.roundHalfEven, numberStyle: CFNumberFormatterStyle.decimalStyle)! )")

Ausführliches Logging in der Konsole

 

 class log {

    class func msg(_ message: String, functionName: String = #function, fileNameWithPath: String = #file, lineNumber: Int = #line, columnNumber: Int = #column ) {      

        #if DEBUG

            let output = "\(core.stringFromDateWithFormat(3, datum: Date() ))| \(lineNumber) \(functionName): \(message) "

            print(output)

        #endif

    }

}

Aufruf der Funktion und Ausgabe in der Konsole:

Copy of NSDictionary or NSMutableDictionary

// *** user ist ein mutableDictionary mit Daten ***

let user:NSMutableDictionary = userRecord as! NSMutableDictionary

 

// *** resultDict ist ein mutableDictionary mit einer Kopie der Daten aus user***

// ist in Schleifen wichtig, da ansonsten der Zeiger übergeben wird.

let resultDict:NSMutableDictionary = user.mutableCopy() as! NSMutableDictionary

 

result.add(resultDict)

 

Einfache Klasse für Demozwecke

class Creatures {

    var type: String

    var things: [String]

    

    init(type: String, things: [String]) {

        self.type = type

        self.things = things

    }

}

 

 

    var settings = [objectsInSection]()

 

        // Do any additional setup after loading the view.

        let creatureDict = ["Animals": ["Cat", "Dog", "Horse"],

                            "Birds":   ["Eagle", "Hawk"],

                            "Fish":    ["Cod", "Mackeral", "Salmon", "Tilapia"]]

        

        for (type, things) in creatureDict {

            let aCreatureList = Creatures(type: type, things: things)

            creatures.append(aCreatureList)

        }

 

        log.msg("creatures.count: \(creatures.count)")

        log.msg("creatures: \(creatures)")

Softwareentwicklung - IT-Service - IT-Sicherheit

Impressum
  • Datenschutzerklärung
  • Disclaimer
  • AGB / AEB
    • Allgemeine Geschäftsbedingungen AGB
    • Allgemeine Einkaufsbedingungen AEB
Quelle: Webpräsenz der Allianz für Cyber-Sicherheit

Copyright © 2025 MATRIX IT development GmbH. Alle Rechte vorbehalten.