Basic Data

String

  • ****String和NSString的差異
    • String是值類型,NSString是參考類型
    • String可直接用 + 來串接字串, NSString要用append()
    • String支援for...in瀏覽方法(String.characters),NSString不支援
    • String計算字串長度用String.characters.countString.lengthOfBytes(using: .utf8);NSString用NSString.length
    • String用 == 比較兩字串是否相等,NSString用 NSString.isEqual(to: String)來比較字串,但是參數的字串要是String格式,也可以用NSString.isEqual(object: Any?)來比較兩物件是否相等
    • String轉數字用Int(String),NSString用NSString.intValue
    • String判斷是否為空用String.isEmpty,NSString用NSString.length == 0
    • String可以用String.insert(newElement: Character, at: String.Index)來在特定字元前插入字元(不行插入字串)
  • ****將NSData轉成String****
    • 方法 var string : String = NSString(data: data, encoding: NSUTF8StringEncoding)
    • 實例 var responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
  • 將Double轉成String的方式
    • let newStr = String(someDouble)
  • 計算Image的size

    var image = info[UIImagePickerControllerOriginalImage] as! UIImage
    var imgData: NSData = NSData(data: UIImageJPEGRepresentation((image), 1)) 
    var imageSize: Int = imgData.length
    
  • 抓取url的路徑

    if let path = urls?[indexPath.row] {
      cell.textLabel?.text = path.path
    }
    
  • 找尋字串在另一個字串內的位置

    // 先找出要搜尋的字串在被搜尋字串內的Range
    let index = directory.absoluteString.range(of: documentURL.path, options: .backwards, range: directory.absoluteString.startIndex..<directory.absoluteString.endIndex, locale: nil)
    // 再用substring從某個index開始往後取剩下的字串
    let subDirectoryName = directory.absoluteString.substring(from: (index?.upperBound)!)
    
  • 把字串內的空白字元移除掉

    let str = " Swift 3.0 "
    let trimmed = str.trimmingCharacters(in: .whitespacesAndNewlines)
    
  • 檢查email格式

func isValidEmail(with email:String) -> Bool {

   print("validate emilId: \(email)")
   let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
   let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
   let result = emailTest.evaluate(with: email)
   return result
}
  • Decode url格式的字串
let title = obj["title"].stringValue.removingPercentEncoding
  • 計算字串長度
string1.characters.count
  • 計算字串在Label內所需的高度
// extension String
func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
    let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
    let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)

    return boundingBox.height
}
// 使用方式
let height =store.storeObj.about!.height(withConstrainedWidth: descriptionCell.contentLabel.frame.width, font: descriptionCell.contentLabel.font)
  • 字串切割
let line = "apple,peach,kiwi"
// 將字串切割並塞入陣列
let parts = line.components(separatedBy: ",")
for part in parts {
    print(part)
}

Array

  • Sort by date
let sortedArray = HistoryArray.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedDescending})
  • forEach的用法
imageViews.forEach { $0?.isHidden = true }
  • contain的用法
attendees.contains(where: { ($0 as AnyObject).sid == User.shared.sid })
  • 陣列使用append()

    假設宣告一陣列 var directoryList:[URL]! 直接使用append()新增元素會遇到unwrapped error,原因是這時候的陣列還是nil狀態,所以要先給陣列值,像是 directoryList = getList() 或是宣告的時候就指定到空陣列 var directoryList:[URL]! = []

NSURL

  • 獲取url最後的component

    let fileName = fileURL.lastPathComponent

Dictionary

  • 宣告
    • var dic:<String, String> = Dictionary()
    • var dic = [String, String]()
    • var dic:[String, String] = [:]
    • var dic:[String, String] = Dictionary()
  • 印在Console上
    • dump(dictionary)

results matching ""

    No results matching ""