auth
всего лишь возвращает инстанц класса FIRAuth
Собственно все ваши currentUser
тут присутствуют. Думаю теперь вопросов быть не должно. @implementation FIRAuth {
/** @var _currentUser
@brief The current user.
*/
FIRUser *_currentUser;
/** @var _firebaseAppName
@brief The Firebase app name.
*/
NSString *_firebaseAppName;
/** @var _listenerHandles
@brief Handles returned from @c NSNotificationCenter for blocks which are "auth state did
change" notification listeners.
@remarks Mutations should occur within a @syncronized(self) context.
*/
NSMutableArray<FIRAuthStateDidChangeListenerHandle> *_listenerHandles;
/** @var _keychain
@brief The keychain service.
*/
FIRAuthKeychain *_keychain;
/** @var _lastNotifiedUserToken
@brief The user access (ID) token used last time for posting auth state changed notification.
*/
NSString *_lastNotifiedUserToken;
/** @var _autoRefreshTokens
@brief This flag denotes whether or not tokens should be automatically refreshed.
@remarks Will only be set to @YES if the another Firebase service is included (additionally to
Firebase Auth).
*/
BOOL _autoRefreshTokens;
/** @var _autoRefreshScheduled
@brief Whether or not token auto-refresh is currently scheduled.
*/
BOOL _autoRefreshScheduled;
/** @var _isAppInBackground
@brief A flag that is set to YES if the app is put in the background and no when the app is
returned to the foreground.
*/
BOOL _isAppInBackground;
/** @var _applicationDidBecomeActiveObserver
@brief An opaque object to act as the observer for UIApplicationDidBecomeActiveNotification.
*/
id<NSObject> _applicationDidBecomeActiveObserver;
/** @var _applicationDidBecomeActiveObserver
@brief An opaque object to act as the observer for
UIApplicationDidEnterBackgroundNotification.
*/
id<NSObject> _applicationDidEnterBackgroundObserver;
}
class Auth {
class func auth() -> FIRAuth { ... }
...
}
class FIRAuth {
var currentUser: FIRUser?
...
}
class FIRUser {
var providerData: [Int : {что-то}]
...
}
Auth.auth().currentUser?.providerData[indexPath.row]
FUIAuth.defaultAuthUI()
возвращает опционал. Почему бы и не продолжить цепочку. Продолжаем: FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication)
Но как не странно этот метод тоже возвращает опционал и мы просто хотим себя от этого обезопасить и сказать, что если на последнем методе тоже будет опционал, то верни правую часть, то бишь false. В итоге получаем общую картину: FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false
class Time {
var seconds:Double = 0
init(seconds: Double) {
self.seconds = seconds
}
var minutes: Double {
get {
return (seconds / 60)
}
set {
self.seconds = (newValue * 60)
}
}
var hours: Double {
get {
return (seconds / (60 * 60))
}
set {
self.seconds = (newValue * (60 * 60))
}
}
var days: Double {
get {
return (seconds / (60 * 60 * 24))
}
set {
self.seconds = (newValue * (60 * 60 * 24))
}
}
}
init(animal_title: [String], animal_about: [String]){
self.animalName = animal_title
self.animalAbout = animal_about
}
private enum CodingKeys: String, CodingKey {
case animalName = "animal_title"
case animalAbout = "animal_about"
}
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
case deviceOwnerAuthenticationWithBiometrics
Indicates that the device owner must authenticate using biometry. // Юзаем только биометрию
case deviceOwnerAuthentication
Indicates that the device owner can authenticate using biometry or the device password. //Юзаем биометрия и если её нет, то Пароль
Подробности по каждому из методов можно найти там же. Подробности 2ого варианта if contex.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
contex.evaluatePolicy(LAPolicy.deviceOwnerAuthentication, localizedReason: "Use TouchID", reply: { wasSuccessful, _ in
if wasSuccessful {
print("Все получилось")
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeVC = mainStoryboard.instantiateViewController(withIdentifier: "HomeVC")
self.navigationController?.pushViewController(homeVC, animated: true)
} else {
print("Что-то пошло не так")
}
})
}
export function registerUserWithEmailAndPassword(nickname, email, password) {
return (dispatch) => {
firebase.auth()
.createUserWithEmailAndPassword(email, password)
.then((user) => {
firebase.database()
.ref('usersChat/' + user._user.uid)
.set({
nickname: nickname,
uid: user._user.uid,
timestamp: Date.now(),
email: email
})
return user
})
.catch((error) => {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
dispatch({
type: types.userRegisterErr,
payload: errorMessage
});
});
}
}
Bool?
понадобился?var per2 = false
.func aaa() throws {
let fetchResult = try PersistenceService.contex.fetch(fetchRequest)
for item in fetchResult {
let per = item.password
guard let pass = per else {
throw AaaErrors.passwordNotCreated
}
print("пароль \(pass!)")
}
}
let sections2 = fetchedResultsController2.sections
, пройдите её и выведите в консоли вот так e sections2
или e dump(sections2)
CoreData
, то должны быть и разные UITableViewCell
для отображения данных разных сущностей. Тогда в методе func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
не возникнет труда понять, с какой сущностью Вы работаете сейчас, ведь у каждого типа UITableViewCell
есть свой уникальный идентификатор. Ну а по нему Вы и сможете понять куда делать переход. N := min(A, int(B/2), C);
A := A-N; B := B-N*2; C := C-N;
N := N*4;
если A > 0 то
N := N+1;
если B > 0 то
N := N+1;
если C > 0 то
N := N+1;
UITextField
и ты постоянно бегаешь туда сюда, то их надо где-то сохранять. UITableViewDataSource/UITableViewDelegate
. Но передача в методе prepare тоже вполне себе нормальный вариант.