Post

Replies

Boosts

Views

Activity

Reply to How read image file metadata?
After some digging, it seems the command line tool mdls does similar job: mdls IMG_0245.jpeg _kMDItemDisplayNameWithExtensions = "IMG_0245.jpeg" kMDItemAcquisitionMake = "Apple" ... kMDItemContentType = "public.jpeg" ... But I prefer achieving these information by coding. Any ideas?
Dec ’23
Reply to Does Swift support number suffixes?
Actually I don't have 'a lot' examples. I just started real app development using Swift a couple of months ago. For this specific scenario, I really like to have what I have in C/C++. Advantages: It can save a few key strokes and makes me as a developer feel better; and even more, makes Swift feels more swift. auto n = 12345ull; vs var n: UInt64 = 12345 Real world example (unit test): func testByteSize() { let tests = [ (s: "1234", v: 1234), (s: "1kb", v: 1024), (s: "1234k", v: 1234 * 1024), (s: "3mb", v: 3 * 1024 * 1024), (s: "2GB", v: 2 * 1024 * 1024 * 1024), (s: "7tb", v: 7 * 1024 * 1024 * 1024 * 1024), ] for test in tests { let n = test.s.parseByteSize() XCTAssertNotNil(n) XCTAssertEqual(UInt64(test.v), n!) } } If Swift allows me to code a number as 1234ull, I won't have to do the UInt64(test.v) cast. Moreover, I really like the tuple's v field be UInt64 instead of default Int.
Nov ’23
Reply to How parse byte size strings into actual number?
It seems I can use the builtin Scanner class: public extension String { func parseByteSize() -> UInt64? { var n: UInt64 = 0 let scanner = Scanner(string: self) if scanner.scanUnsignedLongLong(&n) { if !scanner.isAtEnd { let suffix = self[self.index(self.startIndex, offsetBy: scanner.scanLocation)...] switch suffix.uppercased() { case "KB": n *= 1024 case "MB": n *= 1024 * 1024 case "GB": n *= 1024 * 1024 * 1024 case "TB": n *= 1024 * 1024 * 1024 * 1024 default: return nil } } return n } return nil } }
Nov ’23
Reply to Need advices on NSMutableArray in Swift
It's an agony working with array/dictionary in Swift! NSMutableArray does not support generics so I have to stick to Swift builtin array. I finally have to employ a not-so-perfect-and-ugly workaround: /// Act as a reference container for value types. open class ValueBox<ValueType> { public var value: ValueType public init(_ value: ValueType) { self.value = value } } // Arrays in a dictionary typealias TranslationUnitBox = ValueBox<[TranslationUnit]> var translations = [String: TranslationUnitBox>() // Later in some other code if let box = translations["en"] { box.value[index].translatedText = "..." }
Oct ’23
Reply to Weird error with HTTPS connection
I found the answer myself. It's a misunderstanding of ATS (Apple Transport Security) feature. I thought only non-HTTPS protocol needs the following ATS in info.plist: <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> But it turned out that connecting to HTTPS also needs the above setting.
Oct ’23