Tag: iOS

Java null vs Swift nil

我来自我们使用NULL的Java / Android背景。 现在我正在做Swift / iOS,而且我对Swift的nil感到困惑。 我可以在Java中像NULL一样使用它吗? 它是以完全相同的方式行事,还是在使用方面有所不同?

Android如何像iOS一样将异步任务组合在一起

我在iOS应用程序中使用dispatch_group来分组多个休息请求的功能: static func fetchCommentsAndTheirReplies(articleId: String, failure: ((NSError)->Void)?, success: (comments: [[String: AnyObject]], replies: [[[String: AnyObject]]], userIds: Set<String>)->Void) { var retComments = [[String: AnyObject]]() var retReplies = [[[String: AnyObject]]]() var retUserIds = Set<String>() let queue = dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0) Alamofire.request(.GET, API.baseUrl + API.article.listCreateComment, parameters: [API.article.articleId: articleId]).responseJSON { response in dispatch_async(queue) { guard let comments = response.result.value as? [[String: […]

静态类型语言的生命周期方法

在去年,我已经成为一名移动开发人员和功能编程爱好者。 在每一个移动领域,都有组成了生命周期方法的应用程序。 以下将以Android和Kotlin为例,但iOS和Swift也一样。 在Android中,有Activity的生命周期方法,如onCreate() 。 您也可以定义一个函数onButtonClicked() ,它将完成名称所描述的内容。 为了这个问题的目的,我们假设在onCreate()中定义了一个变量,用在按钮点击处理函数onButtonClickedPrintMessageLength() ( 通常情况下, onCreate()实际上是Activity的设置方法 )。 示例类看起来像这样: class ExampleActivity: Activity() { var savedStateMessage: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) savedStateMessage = "Hello World!" } fun onButtonClickedPrintMessageLength() { System.out.println(savedStateMessage?.length) } } 注意savedStateMessage作为一个String?的声明String? (可空字符串)和使用?. (空安全呼叫)。 这些都是必须的,因为编译器不能保证在onButtonClickedPrintMessageLength()之前调用onCreate() onButtonClickedPrintMessageLength() 。 作为开发者, 我们知道onCreate总是被称为 * ** 。 我的问题是如何告诉编译器有关这些方法的保证顺序,并消除空检查行为? *我想有可能new我们的ExampleActivity并直接调用onButtonClickedPrintMessageLength() ,从而避开Android框架和生命周期方法,但编译器/ JVM在发生任何有趣的事情之前可能会遇到错误。 **首先调用onCreate的保证是由Android框架提供的,这是一个外在的真相来源,将来可能会有不同的功能。 […]

Spring的FacebookTemplate引发用户配置文件的权限异常

我无法继续使用iOS客户端从后台服务获取的令牌进行OAuth会话。 具体来说,它看起来是一个权限问题: iOS客户端获取访问令牌(ObjC / FB iOS SDK v3.24) 使用以下权限建立会话: [FBSession openActiveSessionWithReadPermissions:@[ @"email", @"user_about_me", @"user_friends", @"user_birthday", @"public_profile" . . . 在完成的时候 。 。 。 FBSession *session = [FBSession activeSession]; NSString *accessToken = [session.accessTokenData accessToken]; 访问令牌发送到后端(这是春季启动+ Kotlin) Spring的FacebookTemplate使用上面获得的令牌来实例化,如下所示: @Test fun testFacebookTemplate() { val facebook = FacebookTemplate("$$TOKEN_FROM_FACEBOOK_IOS_SDK$$") //Raises exception . . val profile = facebook.userOperations().userProfile println("Profile: " + […]

如何在Swift中使用扩展方法作为参数?

我想实现一个类似于他们可以在Kotlin中使用构建器的DSL: http : //kotlinlang.org/docs/reference/type-safe-builders.html 这个想法是使用扩展方法作为函数参数,以便您可以使用在您给出参数的闭包中扩展的类中的方法。 本质上允许您将方法和变量注入到闭包的范围中。 在Swift中似乎几乎是可能的,但也许我错过了一些东西。 下面的代码工作,直到我试图在闭包内调用head() : // Class with method to be available within closure class HTML { func head() { print("head") } } // Create a type with same signature as an extension method typealias ext_method = HTML -> () -> () func html(op: ext_method) { let html = HTML() op(html)() […]

使用Android NDK处理现有的iOS应用程序

我正在竞标一个坚持使用NDK为他们的iOS应用程序的合同。 基本上,他们争辩说,他们已经有一个iOS应用程序,他们想要使用Android NDK有一个Android应用程序。 如果这件事情无知,我很抱歉。 我建议我可以在Native Java / Kotlin中重写整个应用程序,但是他们没有看到任何其他的方式。 有没有办法使用Android NDK来创建一个现有的iOS应用程序的Android版本? 我从来没有与NDK合作过。

如何在Swift中编写一个通用的apply()函数?

有没有什么办法可以在Swift 3中使用以下工作? let button = UIButton().apply { $0.setImage(UIImage(named: "UserLocation"), for: .normal) $0.addTarget(self, action: #selector(focusUserLocation), for: .touchUpInside) $0.translatesAutoresizingMaskIntoConstraints = false $0.backgroundColor = UIColor.black.withAlphaComponent(0.5) $0.layer.cornerRadius = 5 } apply<T>函数应该使用类型(T)->Void的闭包,运行它将self传递给它,然后简单地返回self 。 另一个选择是使用一个运算符,例如“ => ”(借用Kotlin和Xtend语言的思路)。 试图做这样的NSObject扩展: extension NSObject { func apply<T>(_ block: (T)->Void) -> T { block(self as! T) return self as! T } } 但是它需要在闭包中明确声明参数类型: let button = […]

如何在静态集合中存储函数会影响系统?

我是一名应用程序员。 我用Java写了几个Android应用程序,在React / Redux中写了SPA。 最近,我开始使用Kotlin进行Android开发,并进入了iOS世界(使用Swift)。 我对React的体验还是挺酷的。 我喜欢反应的概念。 我认为将这个概念应用到我的移动应用程序会很好。 我知道有一堆的Rx库,但不仅仅是gradle-cocoapods-sync-use它,我想找到自己的方式,很好的教育目的。 我无法抗拒。 所以,经过几个小时的研究,我想出了这个想法。 这是事情: 比方说,我从服务器获取一些JSON数组。 然后我解析并将其存储在一个静态类(或Kotlin中的对象 ),我称之为AppContext 它有一系列的功能,数据本身就像这样: var onItemsChanged: MutableList<() -> Unit> = mutableListOf() var items: List<Data>? by Delegates.observable(null) { _: KProperty<*>, _:List<Data>?, _: List<Data>? -> for(callback in onItemsChanged) callback() } /* or didSet{} in Swift */ 然后在用户界面中,每当我想听取值更改事件,我只是写 AppContext.onItemsChanged.add { updateUI() } /* and of course […]

如何处理iOS中的Firebase数据库错误? #AskFirebase

我需要处理“权限被拒绝”错误不同于所有其他错误。 在Android我做到了:(Kotlin) override fun onCancelled(error: DatabaseError) { if (error.code == DatabaseError.PERMISSION_DENIED) { // Warn user } } 在iOS中我只有: someDbReference.observe(.childAdded, with: { data in // Do something }, withCancel: { err in // err is Error print((err as NSError).code) // 1 // Which error? O_o }) 如何确定错误类型? 我读过整个文档,我认为err.localizedDescription == "Permission Denied"是一个非常糟糕的方法。

如何将此代码从iOS Swift转换为Android Kotlin

我试图将此Swift代码转换为Kotlin Android,并有问题。 Swift code: public let kCORNER_RADIUS_BUTTON: CGFloat = 4.0 我已经转换了我在下面找到的CGFloat java类 /** * CGFloat * @author [Harald Kuhr](mailto:harald.kuhr@gmail.com) * * * @author duncan */ class CGFloat : Number { private val value: Double constructor() { value = 0.0 } constructor(d: Double) { value = d } override fun toByte(): Byte { return value.toByte() } […]