Апробация мобильного приложения

Описание системы управления контентом и написания сценариев. Особенности требования о предпочтениях пользователей в прохождении сложных игровых сценариев. Требования к операционной системе 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.