Skip to content
TOC

其它

都是一些常用的方法,进行一些简单的封装。

setLocalDataByKey, getLocalDataByKey

ts
export function getLocalDataByKey(key: string) {
  return NSUserDefaults.standardUserDefaults().objectForKey(key)
}
export function setLocalDataByKey(data: any, key: string) {
  NSUserDefaults.standardUserDefaults().setObjectForKey(data, key)
}
export function getLocalDataByKey(key: string) {
  return NSUserDefaults.standardUserDefaults().objectForKey(key)
}
export function setLocalDataByKey(data: any, key: string) {
  NSUserDefaults.standardUserDefaults().setObjectForKey(data, key)
}

持久化数据,也就是存到本地。但这并不是文件。可以直接存储 JSON 对象,不需要转换成字符串。但注意不要有 undefined,否则会报错。

genNSURL, openURL

ts
export function genNSURL(url: string, encode = false) {
  url = url.trim()
  if (!/^[\w\-]+:\/\//.test(url)) url = `https://${url}`
  return NSURL.URLWithString(encode ? encodeURI(url) : url)
}

export function openURL(url: string, encode = false) {
  MN.app.openURL(genNSURL(url, encode))
}
export function genNSURL(url: string, encode = false) {
  url = url.trim()
  if (!/^[\w\-]+:\/\//.test(url)) url = `https://${url}`
  return NSURL.URLWithString(encode ? encodeURI(url) : url)
}

export function openURL(url: string, encode = false) {
  MN.app.openURL(genNSURL(url, encode))
}

打开链接,需要构建 NSURL 对象。如果链接不是以协议开头,会自动加上 https://。如果链接中有中文,需要设置 encode=true。

postNotification

ts
export function postNotification(key: string, userInfo: any) {
  NSNotificationCenter.defaultCenter().postNotificationNameObjectUserInfo(
    key,
    self,
    userInfo
  )
}
export function postNotification(key: string, userInfo: any) {
  NSNotificationCenter.defaultCenter().postNotificationNameObjectUserInfo(
    key,
    self,
    userInfo
  )
}

发送事件通知,key 为事件名,userInfo 传递的信息,可以是任意类型。

在其它插件或者类中,可以通过 监听事件 来获取信息。在 OhMyMN,控制面板的触发动作就是通过这个方法获取到的。

copy

ts
export function copy(text: string, hud = true) {
  if (text) {
    UIPasteboard.generalPasteboard().string = text.trim()
    hud && showHUD(lang.copy_success)
  } else hud && showHUD(lang.copy_empty)
}
export function copy(text: string, hud = true) {
  if (text) {
    UIPasteboard.generalPasteboard().string = text.trim()
    hud && showHUD(lang.copy_success)
  } else hud && showHUD(lang.copy_empty)
}

复制文字到剪贴板上,如果 hub 为 true,会显示一个复制提示。

isNSNull, NSNull2Null

ts
export function isNSNull(obj: any): obj is NSNull {
  return obj === NSNull.new()
}
export function NSNull2Null<T>(k: T) {
  return isNSNull(k) ? null : (k as Exclude<T, NSNull>)
}
export function isNSNull(obj: any): obj is NSNull {
  return obj === NSNull.new()
}
export function NSNull2Null<T>(k: T) {
  return isNSNull(k) ? null : (k as Exclude<T, NSNull>)
}

NSNull 和 null 是不同的,在 fetch 中,如果返回的数据中有 null,会被转换成 NSNull。这个方法可以将 NSNull 转换成 null。

NSValue2String

ts
export function NSValue2String(v: NSValue) {
  return Database.transArrayToJSCompatible([v])[0] as string
}
export function NSValue2String(v: NSValue) {
  return Database.transArrayToJSCompatible([v])[0] as string
}

NSValue 是一种数据类型,可以存储任意类型的数据。但是在 JS 中,无法直接使用,需要转换成字符串。这个方法可以将 NSValue 转换成字符串。

CGRectString2CGRect, CGSizeValue2CGSize

ts
/**
 * @param str string like "{x,y}, {h,w}"
 */
export function CGRectString2CGRect(str: string): CGRect {
  const arr = str.match(/\d+\.?\d+/g)!.map(k => Number(k))
  return {
    x: arr[0],
    y: arr[1],
    height: arr[2],
    width: arr[3]
  }
}
export function CGRectValue2CGRect(v: NSValue) {
  return CGRectString2CGRect(NSValue2String(v))
}
/**
 * @param str string like "{x,y}, {h,w}"
 */
export function CGRectString2CGRect(str: string): CGRect {
  const arr = str.match(/\d+\.?\d+/g)!.map(k => Number(k))
  return {
    x: arr[0],
    y: arr[1],
    height: arr[2],
    width: arr[3]
  }
}
export function CGRectValue2CGRect(v: NSValue) {
  return CGRectString2CGRect(NSValue2String(v))
}

将 CGRect 类型的 NSValue 转换成 JS 可读的 CGRect 对象。

CGSizeString2CGSize, CGSizeValue2CGSize

ts
/**
 * @param str string like "{x,y}"
 */
export function CGSizeString2CGSize(str: string): CGSize {
  const arr = str.match(/\d+\.?\d+/g)!.map(k => Number(k))
  return {
    width: arr[0],
    height: arr[1]
  }
}
export function CGSizeValue2CGSize(v: NSValue) {
  return CGSizeString2CGSize(NSValue2String(v))
}
/**
 * @param str string like "{x,y}"
 */
export function CGSizeString2CGSize(str: string): CGSize {
  const arr = str.match(/\d+\.?\d+/g)!.map(k => Number(k))
  return {
    width: arr[0],
    height: arr[1]
  }
}
export function CGSizeValue2CGSize(v: NSValue) {
  return CGSizeString2CGSize(NSValue2String(v))
}

将 CGSize 类型的 NSValue 转换成 JS 可读的 CGSize 对象。

Released under the MIT License.