在我的项目中,我使用app group将数据传输到apple watch!这看起来像这样
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
sharedDefaults?.setObject(MyData, forKey: "DataKey")
sharedDefaults?.synchronize()
Run Code Online (Sandbox Code Playgroud)
在WKInterfaceController中,我使用以下代码获取数据:
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
let MyData = sharedDefaults?.objectForKey("DataKey") as! [[AnyObject]]
Run Code Online (Sandbox Code Playgroud)
一切正常!
现在我尝试检测sharedDefaults中的数据?.objectForKey("DataKey")是否确实发生了变化.我尝试使用addObserver方法:
override func willActivate() {
NSUserDefaults(suiteName: "group.com.myappname.defaults")!.addObserver(self, forKeyPath: "DataKey", options: NSKeyValueObservingOptions.New, context: nil)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>){
print("Data Changed")
}
Run Code Online (Sandbox Code Playgroud)
但是"覆盖func observeValueForKeyPath"仅在WKInterfaceController激活时调用,并且当我在NSUserDefaults中更改数据时没有调用(suiteName:"group.com.myappname.defaults")
我也尝试使用NSNotificationCenter:
override func willActivate() {
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(userDefaultsDidChangeNotificationMethod(_:)), name: NSUserDefaultsDidChangeNotification, object: nil)
}
func userDefaultsDidChangeNotificationMethod(notification: NSNotification){
print("Data Changed") …Run Code Online (Sandbox Code Playgroud) 我有 json 数据来自服务器端。
如果我使用下一个代码,我不会打印出漂亮的一行字符串:
print(String(bytes: jsonData, encoding: String.Encoding.utf8))
Run Code Online (Sandbox Code Playgroud)
为了使它打印得漂亮,我使用了下一个代码:
if let json = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) {
if let prettyPrintedData = try? JSONSerialization.data(withJSONObject: json, options: .prettyPrinted) {
print(String(bytes: prettyPrintedData, encoding: String.Encoding.utf8) ?? "NIL")
}
}
Run Code Online (Sandbox Code Playgroud)
但似乎这不是最好的方法。
那么有人知道如何漂亮地打印传入的 jsonData 来打印它吗?
请问我如何在导航栏下添加ProgressView?我尝试在这篇文章中使用解决方案:在导航栏下添加进度条,但是代码是用ObjectiveC语言编写的......我尝试翻译成Swift.这是我在NavigationController SubClass中添加的代码
import UIKit
class CustomNavigationController: UINavigationController {
@IBOutlet var Secondprogress: UIProgressView!
override func viewDidLoad() {
super.viewDidLoad()
NSLayoutConstraint.deactivateConstraints(self.view.constraints())
Secondprogress?.setTranslatesAutoresizingMaskIntoConstraints(false)
var navBar = self.navigationController?.navigationBar
Secondprogress.tag = 1
self.view.addSubview(Secondprogress)
var Constraint = NSLayoutConstraint(item: self.Secondprogress,
attribute:NSLayoutAttribute.Bottom,
relatedBy:NSLayoutRelation.Equal,
toItem:navBar,
attribute:NSLayoutAttribute.Bottom,
multiplier:1.0,
constant:-0.5);
self.view.addConstraint(Constraint);
Constraint = NSLayoutConstraint(item: self.Secondprogress,
attribute:NSLayoutAttribute.Left,
relatedBy:NSLayoutRelation.Equal,
toItem:navBar,
attribute:NSLayoutAttribute.Left,
multiplier:1.0,
constant:0);
self.view.addConstraint(Constraint);
Constraint = NSLayoutConstraint(item: self.Secondprogress,
attribute:NSLayoutAttribute.Right,
relatedBy:NSLayoutRelation.Equal,
toItem:navBar,
attribute:NSLayoutAttribute.Right,
multiplier:1.0,
constant:0);
self.view.addConstraint(Constraint);
Secondprogress.setTranslatesAutoresizingMaskIntoConstraints(false)
Secondprogress.hidden = false
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() …Run Code Online (Sandbox Code Playgroud) uinavigationbar uinavigationcontroller uiprogressview ios swift
对不起谷歌翻译......
你好!我想了解Swift RSBarcodes库的使用.
我试着这样做:
var MyVar:String = ""
self.barcodesHandler = { barcodes in
for barcode in barcodes {
MyVar = barcode.stringValue
}
}
Run Code Online (Sandbox Code Playgroud)
但这没有效果:(
我试着这样做:
RSUnifiedCodeGenerator.shared.generateCode("2166529V", machineReadableCodeObjectType: AVMetadataObjectTypeCode39Code)
Run Code Online (Sandbox Code Playgroud)
但这没有效果:(我该怎么做才能看到生成的图像.我不明白.
也许有人对图书馆或工作示例有完整的描述.我会很感激.
对不起谷歌翻译......
我有一个变量从NSUserDefaults.standardUserDefaults()变成值
var GiftCount = NSUserDefaults.standardUserDefaults().valueForKey("Gift") as! Int
Run Code Online (Sandbox Code Playgroud)
我有一个名为setGiftCount()的函数...
当变量GiftCount发生变化时,我需要调用此函数...怎么做?
我花了一些时间来寻找一个开发人员友好的解决方案(不向项目添加依赖项)如何在后台线程中执行一些艰巨的任务,并在任务完成后将结果返回到主线程。我找到了允许这样做的“AsyncTask”。但是要使用它,您需要为需要在后台运行的每个任务编写样板代码。我是 iOS 开发者,决定尝试 Android 相关的开发。所以在 Swift 中你可以简单地使用下一个代码来完成这个任务:
DispatchQueue.global().async(execute: {
//Do some hard task in background
DispatchQueue.main.async(execute: {
//Return to main
})
})
Run Code Online (Sandbox Code Playgroud)
这看起来很简单。但是在 Kotlin 中我没有找到这么简单的解决方案,并决定创建它。
这是我做的:
我创建了通用类
import android.os.AsyncTask
class BaseAsyncTask<M>: AsyncTask<()->M, Int, M>() {
var completion: ((M)->Unit)? = null
override fun doInBackground(vararg params: (() -> M)?): M? {
for (p in params) {
return p?.invoke()
}
return null
}
override fun onPostExecute(result: M) {
super.onPostExecute(result)
completion?.invoke(result)
}
}
Run Code Online (Sandbox Code Playgroud)
和经理
class AsyncManager {
companion object {
fun <M>execute(inBackground: ()->M, inMain: …Run Code Online (Sandbox Code Playgroud)