Апробация мобильного приложения
Описание системы управления контентом и написания сценариев. Особенности требования о предпочтениях пользователей в прохождении сложных игровых сценариев. Требования к операционной системе iOS-приложения, скрипты поведения автора и администратора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 30.08.2016 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
}
}class private func rewriteJsonFile(fileName: String, json:[JSON]){
var file = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] ;
file = file + "/\(fileName).json"; let str = json.description let data = str.dataUsingEncoding(NSUTF16StringEncoding)!
if let file = NSFileHandle(forWritingAtPath:file) {
file.writeData(data)
print("new")
}
print(str);
}class private func rewriteJsonFile(fileName: String, json:JSON){
var file = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] ;
file = file + "/\(fileName).json";let str = json.descriptionlet data = str.dataUsingEncoding(NSUTF8StringEncoding)!
if let file = NSFileHandle(forWritingAtPath:file) {
file.writeData(data)
}
}class private func rewriteUserCoins(jsonData: NSData, coins:Int, masterFileName:String, time: Double){
var json = JSON(data: jsonData);
print("We save \(coins) coins"); let oldCoins = json["coins"].int!
let newCoins = oldCoins + coins;
json["coins"].int = newCoins;if var dictionary = json["history"].array{
let data = JSON(["time":time, "coins": coins]);
dictionary.append(data);
json["history"] = JSON(dictionary);
}
print(json);
JSONHelper.rewriteJsonFile(masterFileName, json: json)
}class private func rewriteUserInfo(jsonData: NSData, fields:NSDictionary, masterFileName:String){
var json = JSON(data: jsonData);
print("We save \(fields) userData");for field in fields{
json["\(field.key)"].string = field.value as? String;
}print(json);
JSONHelper.rewriteJsonFile(masterFileName, json: json)
}class func getUserCoins(filename: String)->Int?
{
var file = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] ;
file = file + "/\(filename).json";if let jsonData = try? NSData(contentsOfFile: file, options: .DataReadingMappedIfSafe){
var json = JSON(data: jsonData);
return json["coins"].int!;
}
return nil;
}class func getUserField(filename: String, key: String)->JSON
{
var file = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] ;
file = file + "/\(filename).json";if let jsonData = try? NSData(contentsOfFile: file, options: .DataReadingMappedIfSafe){
var json = JSON(data: jsonData);
return json[key];
}
return nil;
}class func getTransactionsObject(filename: String)->JSON?
{
var file = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] ;
file = file + "/\(filename).json";if let jsonData = try? NSData(contentsOfFile: file, options: .DataReadingMappedIfSafe){
return JSON(data: jsonData);
}
return nil;
}
}//
// Extensions.swift
// Practica
//
// Created by Патутинский Федор on 09.01.16.
// Copyright © 2016 Fedor Patutinski. All rights reserved.
//import Foundation
import UIKit;extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.nextResponder()
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}extension UIViewController{
func buyCoinsPressed(sender: UIButton){
if self is CoinsController {
print("We are already here");
}
else {
self.performSegueWithIdentifier("showCoinsToBuy", sender: self)
}
}func showErrorMessage(object: AnyObject){
if let error = object as? NSError{
let alert = UIAlertController(title: "Ошибка", message: error.localizedDescription, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
else if let error = object as? String{
let alert = UIAlertController(title: "Ошибка", message: error, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
else{
print("implement")
}
}
}//extension ActionView {
// class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> ActionView? {
// return UINib(
// nibName: nibNamed,
// bundle: bundle
// ).instantiateWithOwner(nil, options: nil)[0] as? ActionView
// }
//}
//
//extension RoundReportRow {
// class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> RoundReportRow? {
// return UINib(
// nibName: nibNamed,
// bundle: bundle
// ).instantiateWithOwner(nil, options: nil)[0] as? RoundReportRow
// }
//}
//
//extension ScalesReport {
// class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> ScalesReport? {
// return UINib(
// nibName: nibNamed,
// bundle: bundle
// ).instantiateWithOwner(nil, options: nil)[0] as? ScalesReport
// }
//}
extension String{
func getIntArrayFromString(separator:String)->[Int]{
let cleanString = self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
let array = cleanString.componentsSeparatedByString(separator);var returnArray: [Int] = [];for ar in array{
returnArray.append(Int(ar)!);
}return returnArray;
}
}protocol EnumDescription{
var description:String{get};
}
//
// Reachability.swift
// Willy
//
// Created by Патутинский Федор on 27.03.15.
// Copyright (c) 2015 Fedor Patutinski. All rights reserved.
//import Foundation
import UIKit;/// Class for checking Internet connection
public class Reachability {/**
Checks if user is connected to Internet.
- returns: False if user if not connected to Internet and true if user is connected to Inernet
*/
class func isConnectedToNetwork()->Bool{var Status:Bool = false
let url = NSURL(string: "https://www.google.ru/")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "HEAD"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
request.timeoutInterval = 5.0var response: NSURLResponse?_ = (try? NSURLConnection.sendSynchronousRequest(request, returningResponse: &response)) as NSData?if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
Status = true
}
}return Status
}class func displayError() -> UIAlertController{
let alert = UIAlertController(title: "Ошибка!", message: "Отсутствует соединение с Интернетом!", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
return alert;
}
}//
// TalentsViewsArray.swift
// Cogito
//
// Created by Патутинский Федор on 24.04.16.
// Copyright © 2016 Fedor Patutinski. All rights reserved.
//import Foundation;
import UIKit;class ReportsViewsArray{var roundReports:[RoundReportRow] = [];
var scalesReports:[ScalesReportRow] = [];
var scalesWithOppositeReports:[TwoReportsProgressBarRow] = [];
init(){
self.roundReports = [];
self.scalesReports = [];
self.scalesWithOppositeReports = [];
}internal func addConstraintsToContainer(viewsArray:[UIView], container:UIView){
for i in 0 ..< viewsArray.count {
var previousView: UIView!;
if i == 0{
previousView = container;
}
else{
previousView = viewsArray[i-1];
}
viewsArray[i].translatesAutoresizingMaskIntoConstraints = false
var c1: NSLayoutConstraint!;
if i == 0 {
c1 = NSLayoutConstraint(item: viewsArray[i], attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: container, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0);
}
else{
c1 = NSLayoutConstraint(item: viewsArray[i], attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: previousView, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0);
}
let c2 = NSLayoutConstraint(item: viewsArray[i], attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: container, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0);
let c3 = NSLayoutConstraint(item: viewsArray[i], attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: container, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0);
if i == viewsArray.count-1{
let c4 = NSLayoutConstraint(item: container, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: viewsArray[i], attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0);
container.addConstraint(c4);
}
container.addConstraints([c1,c2,c3]);
}
}
}//
// DirectionsCounter.swift
// Willy
//
// Created by Патутинский Федор on 01.03.15.
// Copyright (c) 2015 Ron Kliffer. All rights reserved.
//import Foundation;
import CoreLocation;
import UIKit;class DirectionsCounter {
class func checkArea (basicLocation: CLLocationCoordinate2D, userLocation: CLLocationCoordinate2D)->Bool {
let bL = CLLocation(latitude: basicLocation.latitude, longitude: basicLocation.longitude);
let uL = CLLocation(latitude: userLocation.latitude, longitude: userLocation.longitude);let distance = bL.distanceFromLocation(uL);
if distance < 20 {
return true;
}
else {
return false;
}
}class func angleFromSinCos(sinus: Double, cosinus: Double) -> Double {var finalAngle:Double = 0;
let sinRad = asin(sinus);
let cosRad = acos(cosinus);let sinDegrees = sinRad*180/M_PI;
let cosDegrees = cosRad*180/M_PI;if cosinus > 0 && sinus > 0 {
finalAngle = sinDegrees;
}
else if cosinus < 0 && sinus > 0 {
finalAngle = cosDegrees;
}
else if cosinus < 0 && sinus < 0 {
finalAngle = 360 - cosDegrees;
}
else if cosinus > 0 && sinus < 0 {
finalAngle = 360 + sinDegrees;
}
return finalAngle;
}
class func cosScholarMult (vector1: [Double], vector2:[Double]) -> Double {let x1:Double = vector1[0];
let y1:Double = vector1[1];
let x2:Double = vector2[0];
let y2:Double = vector2[1];let cos = (x1*x2 + y1*y2)/sqrt((x1*x1 + y1*y1)*(x2*x2 + y2*y2));
let angleRad = acos(cos);
let angleGrad = angleRad*180/M_PI;
return angleGrad;
}class func isUserFollowsTheRoute (previousLocation: CLLocation, newLocation: CLLocation, stepLocation:CLLocation, accuracy: CLLocationAccuracy) -> Bool {
let oldDistance = stepLocation.distanceFromLocation(previousLocation);
let newDistance = stepLocation.distanceFromLocation(newLocation);let difference = oldDistance - newDistance + 50;
print(accuracy);if difference >= 0 && newDistance < 2000 {
return true;
}
else {
return false;
}
}// Build 24.03class func vectorFromPoints(previousPoint: CLLocationCoordinate2D, nextPoint: CLLocationCoordinate2D )-> [Double] {
let x1:Double = previousPoint.latitude
let y1:Double = previousPoint.longitude
let x2:Double = nextPoint.latitude;
let y2:Double = nextPoint.longitudelet coordX = x2 - x1;
let coordY = y2 - y1;
var quater:Double = 0;if coordX > 0 {
if coordY > 0 {
quater = 1;
}
else if coordY < 0 {
quater = 4;
}
}
else if coordX < 0 {
if coordY < 0 {
quater = 3;
}
else if coordY > 0 {
quater = 2;
}
}let massive: [Double] = [coordX, coordY, quater];return massive;
}class func compareTwoVectors (previousVector: [Double], nextVector:[Double]) -> Int {let prevVectX = previousVector[0];
let prevVectY = previousVector[1];
let nextVectorX = nextVector[0];
let nextVectorY = nextVector[1];var angle = atan2(nextVectorY, nextVectorX) - atan2(prevVectY, prevVectX);
angle = angle * 180 / M_PI;
// println(angle);
if abs(angle) > 180 {
if angle > 0 {
angle = angle - 180;
}
else {
angle = 180 + angle;
}
angle = angle*(-1);
}let angleInt = Int(round(angle/5)*5);return angleInt;
}class func compareTwoVectors (usersVector:[Double], usersCourse: CLLocationDirection) -> Int {let nextVectorX = usersVector[0];
let nextVectorY = usersVector[1];
// var angle = atan2(nextVectorY, nextVectorX) - atan2(prevVectY, prevVectX);var vector = atan2(nextVectorY, nextVectorX) * 180 / M_PI;
if vector < 0 {
vector = vector + 360;
}
print("Vector of turn \(vector)");
var angle = vector - usersCourse; if abs(angle) > 180 {
if angle > 0 {
angle = angle - 180;
}
else {
angle = 180 + angle;
}
angle = angle*(-1);
}let angleInt = Int(round(angle/5)*5);return angleInt;
}
class func ifPointsAreEqual (point1:CLLocationCoordinate2D, point2:CLLocationCoordinate2D) -> Bool {if point1.latitude == point2.latitude || point1.longitude == point2.longitude {
return true;
}
else {
return false;
}
}
class func checkAreaForPolyline (basicLocation: CLLocationCoordinate2D, userLocation: CLLocationCoordinate2D)->Bool {
let s2 = (userLocation.latitude - basicLocation.latitude)*(userLocation.latitude - basicLocation.latitude);
let s1 = (userLocation.longitude - basicLocation.longitude)*(userLocation.longitude - basicLocation.longitude);
let r2:Double = 0.00000035;
if s2 + s1 <= r2 {
return true;
}
else {
return false;
}
}class func chooseNeccesaryPoint (previousUserLocation: CLLocationCoordinate2D, currentUserLocation: CLLocationCoordinate2D, array: [CLLocationCoordinate2D]) -> [CLLocationCoordinate2D] {
var arrayOfLat: [Double] = [];
var arrayOfLong: [Double] = [];for a in array {
arrayOfLat.append(a.latitude);
arrayOfLong.append(a.longitude);
}let currentUserLat: Double = currentUserLocation.latitude;
let currentUserLong: Double = currentUserLocation.longitude;let previosUserLat: Double = previousUserLocation.latitude;
let previousUserLong: Double = previousUserLocation.longitude;let latDiff = currentUserLat - previosUserLat;
let longDiff = currentUserLong - previousUserLong;var directionLat: Double = 0;
var directionLong: Double = 0;if latDiff < 0 {
directionLat = -1;
}
else {
directionLat = 1;
}
if longDiff < 0 {
directionLong = -2;
}
else {
directionLong = 4;
}let ourCase = directionLat * directionLong;
var finalLongNext: Double?;
var finalLatNext: Double?;var finalLongPrev: Double?;
var finalLatPrev: Double?; switch ourCase {
// - = minimum, + = maximum
// lat+ and long-
case -2:
finalLongNext = arrayOfLong.reduce(arrayOfLong[0], combine: { min($0, $1) });
finalLatNext = arrayOfLat.reduce(arrayOfLat[0], combine: { max ($0, $1) });
finalLongPrev = arrayOfLong.reduce(arrayOfLong[0], combine: { max($0, $1) });
finalLatPrev = arrayOfLat.reduce(arrayOfLat[0], combine: { min($0, $1) });
break;
// lat- and long-
case 2:
finalLongNext = arrayOfLong.reduce(arrayOfLong[0], combine: { min($0, $1) });
finalLatNext = arrayOfLat.reduce(arrayOfLat[0], combine: {min ($0, $1) });
finalLongPrev = arrayOfLong.reduce(arrayOfLong[0], combine: { max($0, $1) });
finalLatPrev = arrayOfLat.reduce(arrayOfLat[0], combine: { max($0, $1) });
break;
// lat+ and long+
case 4:
finalLongNext = arrayOfLong.reduce(arrayOfLong[0], combine: { max($0, $1) });
finalLatNext = arrayOfLat.reduce(arrayOfLat[0], combine: {max ($0, $1) });
finalLongPrev = arrayOfLong.reduce(arrayOfLong[0], combine: { min($0, $1) });
finalLatPrev = arrayOfLat.reduce(arrayOfLat[0], combine: { min($0, $1) });
break;
// lat- and long+
case -4:
finalLongNext = arrayOfLong.reduce(arrayOfLong[0], combine: { max($0, $1) });
finalLatNext = arrayOfLat.reduce(arrayOfLat[0], combine: {min ($0, $1) });
finalLongPrev = arrayOfLong.reduce(arrayOfLong[0], combine: { min($0, $1) });
finalLatPrev = arrayOfLat.reduce(arrayOfLat[0], combine: { max($0, $1) });
break;
default:
finalLatNext = 0;
finalLongNext = 0;
break;
}return [CLLocationCoordinate2DMake(finalLatPrev!, finalLongPrev!), CLLocationCoordinate2DMake(finalLatNext!, finalLongNext!)];
}class func flowingTurnInstructions (angle: Double) -> String {
if angle > 5 {
return "Плавно поверните направо"
}
if angle < -5 {
return "Плавно поверните налево"
}
else {
return "";
}
}
class func ifAccurate (places: [String]) -> Bool {
if places.count > 1 {
return false;
}
else {
return true;
}
}
class func getUniqueElements (massive: [String]) -> [String] {
var mas = massive;
var filter = Dictionary<String,Int>()
var len = massive.count
for index in 0 ..< len {
let value = massive[index]
if (filter[value] != nil) {
mas.removeAtIndex(index-1);
len -= 1
}else{
filter[value] = 1
}
}
return mas;
}class func countZoom (distance:Double) -> Float {
var zoom:Float = 0;
if distance > 0.01 && distance <= 0.02 {
zoom = 14
}
else if distance > 0.02 {
zoom = 13;
}
else if distance > 0.005 && distance <= 0.01 {
zoom = 15;
}
else if distance <= 0.005 {
zoom = 16;
}
return zoom;
}
class func countHalf (userLocation:CLLocationCoordinate2D, pointLocation:CLLocationCoordinate2D) -> CLLocationCoordinate2D {
let x = (pointLocation.latitude + userLocation.latitude)/2;
let y = (pointLocation.longitude + userLocation.longitude)/2;return CLLocationCoordinate2DMake(x, y);
}
class func isTimeToSay (distancePrevious: Int, distanceCurrent: Int) -> Bool {
let difference = distancePrevious - distanceCurrent;
var response = false;
var limit = 50;
if distanceCurrent > 50 && distanceCurrent < 75{
limit = 30;
}
else if distanceCurrent > 25 && distanceCurrent <= 50{
limit = 10;
}
else if distanceCurrent <= 25 {
return false;
}
if difference > limit {
response = true;
}
else if difference > 0 && difference <= limit {
response = false;
}
else if difference <= 0 && difference > -limit {
response = false;
}
else {
response = true;
}
return response;
}class func makeLastString (lastLine: String, distance: String) -> String {var finalString = lastLine;
let myStringArr = lastLine.componentsSeparatedByString("Пункт") as [String]!
if myStringArr.count > 1 {
let secondPart = "Пункт" + myStringArr[1];finalString = myStringArr[0] + ". Пройдите прямо \(distance). " + secondPart;
}
else {
finalString = lastLine + " Пройдите прямо \(distance). Вы прибыли к пункту вашего назначения";
}
return finalString;
}class func getNorthVectorFromPoints() -> [Double] {return self.vectorFromPoints(CLLocationCoordinate2DMake(0, 0), nextPoint: CLLocationCoordinate2DMake(0, 1));
}class func getInstructionFromTwoAngles (angleStep: Int, stepStreets: [String], currentIndex: Int) -> String {
print("Are streets full or not \(stepStreets.count) and \(currentIndex)");
var returnString = "";if angleStep > 10 {
if angleStep <= 25 {
returnString = "Плавно поверните направо на \(angleStep) градусов в сторону улицы \(stepStreets[currentIndex])"
}
else {
returnString = "Поверните направо на \(angleStep) градусов в сторону улицы \(stepStreets[currentIndex])"
}
}
else if angleStep < -10 {
if angleStep >= -25 {
returnString = "Плавно поверните налево на \(angleStep*(-1)) градусов в сторону улицы \(stepStreets[currentIndex])";
}
else {
returnString = "Поверните налево на \(angleStep*(-1)) градусов в сторону улицы \(stepStreets[currentIndex])";
}
}
else {
returnString = "Следуйте прямо по \(stepStreets[currentIndex]) в сторону улицы \(stepStreets[currentIndex+1])";
} return returnString;
}class func getInstructionsWithouteAngle(stepStreets: [String], currentIndex: Int) -> String {
var returnString = "";
returnString = "Начните движение по \(stepStreets[currentIndex]) в сторону улицы \(stepStreets[currentIndex+1])";return returnString;
}class func getInstructions (vector1: [Double], vector2: [Double], stepStreets: [String], currentIndex: Int) -> String {let angle = self.compareTwoVectors(vector1, nextVector: vector2 );let s = self.getInstructionFromTwoAngles(angle, stepStreets: stepStreets, currentIndex: currentIndex);
return s;
}class func getInstructions (northVector: [Double], usersVector: [Double], stepStreets: [String], currentIndex: Int, usersCourse: CLLocationDirection) -> String {
var s = "";let angle = self.compareTwoVectors(usersVector, usersCourse: usersCourse);if usersCourse < 0 {
s = "Мы определяем вектор вашего движения. "
s = s + self.getInstructionsWithouteAngle(stepStreets, currentIndex: currentIndex);
print("First instruction \(s)");
}
else {
s = self.getInstructionFromTwoAngles(angle, stepStreets: stepStreets, currentIndex: currentIndex);
}
return s;
}// Reference pointsclass func getNeccesaryReferencePoints (firstPoint: CLLocation, secondPoint: CLLocation) -> [CLLocation] {
let distance = firstPoint.distanceFromLocation(secondPoint);
var returnMassive: [CLLocation] = [];
var numberOfPoints = 0;
if distance > 0 && distance < 50 {
numberOfPoints = 4;
}
else if distance >= 50 && distance < 100 {
numberOfPoints = 8;
}
else if distance >= 100 && distance < 200 {
numberOfPoints = 16;
}
else if distance >= 200 && distance < 500 {
numberOfPoints = 32;
}
else if distance >= 500 && distance < 750 {
numberOfPoints = 64;
}
else {
numberOfPoints = 128;
}let vectorLat = secondPoint.coordinate.latitude - firstPoint.coordinate.latitude;
let vectorLon = secondPoint.coordinate.longitude - firstPoint.coordinate.longitude;let deltaLat: Double = vectorLat / Double(numberOfPoints+1);
let deltaLon: Double = vectorLon / Double(numberOfPoints+1);for i in 1 ..< numberOfPoints+1 {
let lat = firstPoint.coordinate.latitude + (Double(i)*deltaLat);
let long = firstPoint.coordinate.longitude + (Double(i)*deltaLon);
let location = CLLocation(latitude: lat, longitude: long);
returnMassive.append(location);
}return returnMassive;
}
}
//
// GooglePlace.swift
// Willy
//
// Created by Fedor Patutinski.
// Copyright (c) 2015 Fedor Patutinski. All rights reserved.
//import UIKit
import Foundation
import CoreLocation/// Class for saving place queried from google
class GooglePlace {/// Name of place
let name: String;
/// Address of place
let address: String;
/// Location of place
let location: CLLocation;
/// Type of place
let placeType: String;
/// Street of place
let street: String/// Initializer based on dictionary got from query
init(dictionary:NSDictionary, acceptedTypes: [String])
{
name = dictionary["name"] as! String
address = dictionary["vicinity"] as! Stringlet location = dictionary["geometry"]?["location"] as! NSDictionary
let lat = location["lat"] as! CLLocationDegrees
let lng = location["lng"] as! CLLocationDegrees
self.location = CLLocation(latitude: lat, longitude: lng);if address == "" {
street = name;
}
else {
var array = address.characters.split {$0 == ","}.map { String($0) };
street = array[0];
}
var foundType = "";
let ts = dictionary["types"] as! [String];foundType = ts[0];
let possibleTypes = acceptedTypes.count > 0 ? acceptedTypes : ["bakery", "bar", "cafe", "grocery_or_supermarket", "restaurant", "street_address"]
for type in dictionary["types"] as! [String] {
if possibleTypes.contains(type) {
foundType = type
break
}
}
if foundType == "" {
foundType = "restaurant";
}
placeType = foundType
}/// Initializer for place from text search
init(dictionary:NSDictionary) {
print(dictionary);
name = dictionary["name"] as! String;
address = dictionary["formatted_address"] as! String;let location = dictionary["geometry"]?["location"] as! NSDictionary
let lat = location["lat"] as! CLLocationDegrees
let lng = location["lng"] as! CLLocationDegrees
self.location = CLLocation(latitude: lat, longitude: lng);
if address == "" {
street = name;
}
else {
var array = address.characters.split {$0 == ","}.map { String($0) };
street = array[0];
}
let type = dictionary["types"] as! [String];
placeType = type[0];
}/// Initializer from parametrs (is used for underground exit)
init(name: String, address: String, location: CLLocation, street: String){
self.name = name;
self.address = address;
self.location = location;
self.street = street;
self.placeType = "metro_exit";
}
}
Размещено на Allbest.ru
...Подобные документы
Обзор мобильной операционной системы ios: Архитектура ОС iOS; уровень библиотек; среды разработки приложения (Xcode, Xamarin). Доступ к информации колледжа "Угреша". Требования к мобильному приложению. Подготовка среды разработки. Тестирование приложения.
дипломная работа [5,6 M], добавлен 10.07.2014Основные инструменты построения Web-приложения. Язык сценариев PHP. Системный анализ предметной области базы данных. Коды SQL запросов на создание таблиц. Разработка Web-приложения. Описание функциональности модулей. Система управления содержимым статей.
курсовая работа [4,8 M], добавлен 28.04.2014Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.
курсовая работа [987,1 K], добавлен 27.06.2019Разработка приложений для смартфонов на ОС Android для сети аптек "Фармация". Архитектура операционной системы Android. Архитектура и реализация приложения. Его функциональность. Описание работы мобильного приложения. Расчет затрат на создание продукта.
дипломная работа [1,6 M], добавлен 17.06.2017Общая характеристика и структурная схема приложения, требования к нему и функциональные особенности, сферы практического применения. Обоснование выбора языка программирования. Описание интерфейса и инструкция пользователя. Проведение листинга программы.
дипломная работа [1,0 M], добавлен 10.07.2017Анализ российского рынка мобильных приложений. Мобильное приложение как новый канал коммуникации с целевой аудиторией. Этапы создания мобильного приложения. План продвижения мобильного приложения в сети Интернет. Бесплатные инструменты продвижения.
дипломная работа [1,6 M], добавлен 23.06.2016Разработка приложения для проверки использования времен глаголов в английском языке. Создание базы данных. Анализ используемых средств для реализации автоматического разбора текста. Проектирование мобильного приложения с помощью диаграмм деятельности.
дипломная работа [2,6 M], добавлен 13.09.2017Основы Web-программирования. Сервер баз данных MySQL. Язык сценариев PHP. Язык гипертекстовой разметки HTML. Назначение и цели разработки сайта. Форма входа и регистрации, обратная связь интернет–магазина. Требования к структуре сайта, описание контента.
курсовая работа [754,5 K], добавлен 02.06.2014Область применения и требования создаваемого Web-приложения. Требования к техническому и программному обеспечению. Разработка структуры Web-приложения и выбор средств программной реализации. Программная реализация Web-приложения. Структура базы данных.
дипломная работа [1,4 M], добавлен 03.06.2014Изучение языков программирования PHP, SQL, C++, HTML. Рассмотрение правил запуска и использования локального сервера Denwer. Составление технического задания по разработке программного продукта. Описание создаваемого мобильного и веб-приложения.
курсовая работа [212,4 K], добавлен 07.04.2015Обработка информации в электронных таблицах Excel или списках, основные понятия и требования к спискам, экономико-математические приложения Excel. Решение уравнений и задач оптимизации: подбор параметров, команда "Поиск решения", диспетчер сценариев.
реферат [704,3 K], добавлен 08.11.2010Создание многоуровневого приложения с Web-интерфейсом выставления оценки фильму и просмотра оценок других пользователей. Клиентская часть приложения. Разработка многопользовательского веб-приложения на ASP.NET MVC 3 с разграничением доступа к данным.
курсовая работа [949,7 K], добавлен 22.02.2015Общая схема работы приложения Android. Разработка обучающего приложения для операционной системы Android, назначение которого - развитие речи посредством произнесения скороговорок. Описание компонентов разработанного приложения, его тестирование.
дипломная работа [1,2 M], добавлен 04.02.2016Разработка средствами языка PHP и Фреймворка Yii системы регистрации и аутентификации пользователей на сайте. Проектирование приложения с помощью языка UML, построение диаграммы прецедентов. База данных приложения. Страница регистрации пользователей.
отчет по практике [1,1 M], добавлен 15.09.2014Общая характеристика и анализ требований к разрабатываемому приложению, функциональные особенности и сферы практического применения. Проектирование базы данных и выбор системы управления ею. Тестирование приложения и выбор языка программирования.
дипломная работа [791,8 K], добавлен 10.07.2017Требования к операционной системе Linux, встраиваемые приложения. Предсказуемость поведения, свойства ОС реального времени. Структура ядра; системные вызовы; работа с файлами. Стандартные устройства; обзор программирования; компилирование и линковка.
лекция [112,2 K], добавлен 29.07.2012Анализ популярных игровых приложений. Жанр – аркады с геймплеем Runner. Получение продукта, ориентированного на людей, использующих мобильные устройства на базе Android, и предназначенный для развлечения пользователей. Визуальная составляющая приложения.
дипломная работа [742,7 K], добавлен 10.07.2017Характеристика объекта автоматизации. Создание многоуровневой архитектуры приложения, отладка метода безошибочной идентификации пользователей системы. Разработка нестандартного метода преобразования объектов базы данных в объекты классов приложения.
курсовая работа [395,4 K], добавлен 28.04.2015Разработка программы-приложения для создания композиции кривых второго порядка в полярных координатах. Описание используемых констант, переменных, компонентов, процедур и функций. Источники входной и выходной информации. Требования к программе и системе.
реферат [125,2 K], добавлен 28.05.2014Базовый синтаксис языка сценариев JavaScript. Создание страниц, включающих в себя программы, которые взаимодействуют с пользователем, управляют браузером и динамически создают HTML-содержимое. Работа с объектами, которые инкапсулируют данные и поведение.
лабораторная работа [58,6 K], добавлен 25.05.2016