Swift:字符串(String)分割之Substring优雅转换


认识Substring类型

这是一个全新的类型,看类名像是String的子类,但是大家千万别被误导了,Substring并不是String的子类,这是两个不同的类型,但是它们都继承了StringProtocol协议,因此存在一些共性;在开发中Substring并不常用(目前只在分割String见到),所以往往要转成String

字符串(String)分割函数

下面是Swift中分割函数定义

public func split(separator: Character, maxSplits: Int = default, omittingEmptySubsequences: Bool = default) -> [Substring]

从定义我们知道返回类型是[Substring],并不是[String]

参数描述
separator分割标识
maxSplits最大分割次数,1=表示只分割2次就停止,2=表示只分割2次就停止,以此类推,默认值为Int.max
omittingEmptySubsequences是否忽略空值,true=忽略空值, fasle=不忽略空值, 默认值为true


macOS开发:调整NSImage尺寸大小


extension NSImage {
    
    func resize(_ to: CGSize, isPixels: Bool = false) -> NSImage {
        
        var toSize = to
        let screenScale: CGFloat = NSScreen.main?.backingScaleFactor ?? 1.0

        if isPixels {
            
            toSize.width = to.width / screenScale
            toSize.height = to.height / screenScale
        }
    
        let toRect = NSRect(x: 0, y: 0, width: toSize.width, height: toSize.height)
        let fromRect =  NSRect(x: 0, y: 0, width: size.width, height: size.height)
        
        let newImage = NSImage(size: toRect.size)
        newImage.lockFocus()
        draw(in: toRect, from: fromRect, operation: NSCompositingOperation.copy, fraction: 1.0)
        newImage.unlockFocus()
    
        return newImage
    }
}

使用

let myImage = NSImage(named: "imageName")!
        
/// 调整到指定point(点)
let newSize = CGSize(width: 200, height: 100)
let newImage1 = myImage.resize(newSize)
        
/// 调整到指定Pixels(像素)
let newPixels = CGSize(width: 400, height: 200)
let newImage2 = myImage.resize(newPixels, isPixels: true)

iOS开发:Swift/Objective-C高效生成随机字符串


Objective-C版

// 随机生成字符串(由大小写字母、数字组成)
+ (NSString *)random: (int)len {
    
    char ch[len];
    for (int index=0; index<len; index++) {
        
        int num = arc4random_uniform(75)+48;
        if (num>57 && num<65) { num = num%57+48; }
        else if (num>90 && num<97) { num = num%90+65; }
        ch[index] = num;
    }
    
    return [[NSString alloc] initWithBytes:ch length:len encoding:NSUTF8StringEncoding];
}

// 随机生成字符串(由大小写字母组成)
+ (NSString *)randomNoNumber: (int)len {
    
    char ch[len];
    for (int index=0; index<len; index++) {
        
        int num = arc4random_uniform(58)+65;
        if (num>90 && num<97) { num = num%90+65; }
        ch[index] = num;
    }
    
    return [[NSString alloc] initWithBytes:ch length:len encoding:NSUTF8StringEncoding];
}

Swift版


程序员的感想


加班估计是程序员逃不过的命运
加班归加班,但是加班氛围很浓甚至推崇加班制度的公司就不考虑员工的身体健康吗
从另外一个角度,公司是一个大家庭,如果一个公司都不在乎你的健康,值得你留恋吗


Shell:sed用法 - 查找并替换字符串


语法

sed 's/serach_str/replace_str/g' file_path
在某个文件中查找所有的serach_str并替换为replace_str
参数描述
serach_str要搜索的字符串
replace_str用于替换搜索到的字符串
file_path文件路径

用法举例

sed 's/to/too/g' my.txt
my.txt文件中查找所有的to并用too替换掉

iOS开发:判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等


保证能判断,呕心沥血,不行切JIJI

方法一


Objective-C

// iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
// 判断刘海屏,返回YES表示是刘海屏
- (BOOL)isNotchScreen {
    
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
        return NO;
    }
    
    CGSize size = [UIScreen mainScreen].bounds.size;
    NSInteger notchValue = size.width / size.height * 100;
    
    if (216 == notchValue || 46 == notchValue) {
        return YES;
    }
    
    return NO;
}

Swift

extension UIViewController {
    
    /// iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
    /// 判断刘海屏,返回true表示是刘海屏
    ///
    var isNotchScreen: Bool {
        
        if UIDevice.current.userInterfaceIdiom == .pad {
            return false
        }
        
        let size = UIScreen.main.bounds.size
        let notchValue: Int = Int(size.width/size.height * 100)
        
        if 216 == notchValue || 46 == notchValue {
            
            return true
        }
        
        return false
    }
}

方法二


Objective-C

 // 如果是刘海屏
 if (self.view.safeAreaInsets.bottom > 0) {
   // do something     
  }

Swift

 // 如果是刘海屏
 if self.view.safeAreaInsets.bottom > 0 {
   // do something         
 }

方法一与方法二比较


  • 方法一很明显的优势是代码少,缺点是依赖UIView实例,在一些非UI场景的逻辑处理中如果要判断刘海屏,就不是很友好,当然你也可以先获得当前View实例然后再判断,还有一个问题就是在iPad上safeAreaInsets.bottom的值也是大于0,如果是通用APP就不适用了
  • 方法二代码多,这是缺点;优点是通用,不依赖UIView实例,可以在任何场景自由使用,在iPad/iPhone中可精准识别,无须做代码修改
  • 方法一与方法二共同的缺点就是,如果在子线程中调用,都要先切回主线程,否则会导致崩溃
  • 两种方法任君选择

MySQL:REPLACE函数的使用


REPLACE函数功能

REPLACE(columnName, search_str, replace_str)
查找columnName字段中所有search_str,并替换为replace_str

举例使用

源数据表

执行下面sql语句

UPDATE `tableName` SET `text`=REPLACE(`text`, '<!--markdown-->', 'newValue');
查找text字段中所有<!--markdown-->,并替换为newValue

结果


MySQL:GROUP_CONCAT函数的使用


GROUP_CONCAT功能

将某个字段的值拼接成字符串。

举例使用

先看一下原始数据表

执行下面sql语句

SELECT `cid`,GROUP_CONCAT(mid) AS `mids` FROM `tableName`  GROUP BY `cid`;
将相同cid的行的mid字段的值拼接成字符串(并以mids作为字段名显示),并以cid进行分组。

结果


一抬头已是凌晨4点



本网站在改版,在忙着测试,终于忙完了,一看时间已是凌晨4点。
改版后风格更加小清新,更加整洁;化繁为简,整合其他页面,重新设计导航,更方便使用,希望大家喜欢哈!!!
晚安,广州
~ ~ ~ ~ ~
呵呵,好像是早安了


心情



青春都是如此,带着疼痛,却又义无反顾。若人生是一场初相遇,在素年锦时,我与你共一场胭脂醉,不醉不休。爱仿佛一扇旋转门,找到一个入口,等着我们的就必然是一个出口。没有谁的生活始终充满幸福快乐,总有一些痛苦会折磨我们心灵。我们可以选择让心静下来,慢慢沉淀那些痛苦。


Swift4.1 新特性compactMap函数


关于compactMap函数

苹果在Swift 4.1中新增compactMap函数,用来代替flatMap函数。

在Swift标准库中compactMap定义如下

public func compactMap<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

在Swift标准库中flatMap定义如下

public func flatMap(_ transform: (Element) throws -> String?) rethrows -> [String]
从定义可以看出,经过flatMap后一定变成字符串数组,而compactMap是任意类型的数组。从而compactMap使用更加灵活。

compactMap函数的应用

1.过滤 nil

let nums = [1, nil, 3, nil, 5]
let result = nums.compactMap { (item) -> Int? in
    return item
}
print(result) // [1, 3, 5]

简洁语法,可这样使用

let result = nums.compactMap { return $0 }
print(result) // [1, 3, 5]

2.类型转换

let nums = [1, 2, 3, 4, 5]
let result = nums.compactMap { (item) -> String? in
    
    return "\(item)"
}
print(result) // ["1", "2", "3", "4", "5"]

简洁语法,可这样使用

let nums = [1, 2, 3, 4, 5]
let result = nums.compactMap { return "\($0)" }
print(result) // ["1", "2", "3", "4", "5"]

3.筛选数据 - 能被4整除的数

let nums = [12, 55, 733, 77, 44]
let result = nums.compactMap { (item) -> Int? in

    if item%4 == 0 {
        return item
    }
    return nil
}
print(result) // [12, 44]
compactMa函数不仅仅以上的使用,本文只是引进门。