我正在学习Swift.在第一印象中,我无法看到任何声明常量(没有初始存储值)作为类中的可选项的点...例如
let userName: String?
Run Code Online (Sandbox Code Playgroud)
因为默认初始值设定项会将其分配给nil,并且随后无法更改(因为它是常量).
据我了解,自定义初始化程序仍然可以为它分配一个非零值,但在这种情况下你不会只是声明它let userName: String(即非可选)
我本以为如果它是一个多余的模式,苹果会提到它,但我看不出它们有......所以在什么情况下可选的常量声明会被使用或有用?
简单的问题.如果我在一个完成块内 - 例如使用firebase登录facebook ...并且登录成功.如果我想从完成块中解除当前视图控制器(登录视图控制器),我是否需要返回主队列才能执行此操作.我假设登录完成块正在后台线程上完成,并且对UI的任何更改(即解雇当前视图控制器)应该在主线程上完成...这里最好的做法是什么......或者我错过了什么?
@IBAction func facebookLoginTapped(sender: AnyObject) {
//
let ref = Firebase(url: "https://XXXX.firebaseio.com")
let facebookLogin = FBSDKLoginManager()
facebookLogin.logInWithReadPermissions(["email"], fromViewController: self, handler: { (facebookResult, facebookError) -> Void in
if facebookError != nil {
print("Facebook login failed. Error \(facebookError)")
} else if facebookResult.isCancelled {
print("Facebook login was cancelled.")
} else {
//successfully logged in
//get facbook access token
let accessToken = FBSDKAccessToken.currentAccessToken().tokenString
//use access token to authenticate with firebase
ref.authWithOAuthProvider("facebook", token: accessToken,
withCompletionBlock: { error, authData in
if error != …Run Code Online (Sandbox Code Playgroud) 我正在使用swift在iOS中实现解析登录.从登录视图控制器我只需使用电子邮件和密码就可以通过swift注册新用户.这会创建一个正确保存到Parse后端的PFUser.然后,用户被带到UserDetails视图控制器,通过提供更多详细信息来"完成"他们的注册,这些详细信息将保存到coredata(我只使用解析功能进行注册).如果用户在"完成"其他详细信息之前取消,我想从之前可能创建的解析中删除PFUser.在UserDetails视图控制器下的cancelTapped ibaction运行代码
if PFUser.currentUser() != nil {
PFUser.currentUser()?.deleteInBackgroundWithBlock({ (deleteSuccessful, error) -> Void in
print("success = \(deleteSuccessful)")
})
//user deleted in background block above but still logged in so now logout
PFUser.logOut()
}
Run Code Online (Sandbox Code Playgroud)
但我得到以下解析错误[错误]:除非已经过身份验证,否则无法删除用户.(代码:206,版本:1.8.5)....我不知道需要什么身份验证过程,我猜测问题可能是因为我试图在解析之前删除用户有适当的时间来创建用户第一名....任何帮助或建议赞赏
任何人都可以解释为什么第1行工作创建一个空的swift字典,但第2行不是当我尝试用int键和双值元组创建一个swift字典时....应该怎么做?
var testDic2 = [Int:Double]()
var testDic3 = [Int:(Double,Double)]()
Run Code Online (Sandbox Code Playgroud)
我在游乐场尝试了各种组合,唯一没有给我编译错误的版本如下
var possibleTips = [Int(): (tipAmt:Double(), total:Double())]
Run Code Online (Sandbox Code Playgroud)
但我不确定这最后一种形式是否按照我的意愿声明字典(即按照上面的testDict3)
我有一组存储在coredata中的照片.在一个特定的选项卡(标签栏控制器)我想显示一个选定的照片.(照片选择是在照片集合视图的不同标签中进行的).在coredata中,我为每张名为selectedPhoto的照片都有一个布尔属性.我想只有1张照片将此布尔值设置为YES.如果我选择一张新照片,有没有办法自动将之前所选照片的布尔属性切换为NO.换句话说,有一种方法可以在一组具有布尔属性的对象中使用YES,其中将一个对象的布尔值设置为YES会自动将其切换为所有其他对象的NO.